与服务器的交互
新建HttpUtil类,代码如下:
public class HttpUtil {
publicstatic void sendHttpRequest(final String address,
finalHttpCallbackListener listener) {
newThread(new Runnable() {
@Override
publicvoid run() {
HttpURLConnectionconnection = null;
try{
URLurl = new URL(address);
connection= (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");//设置HTTP请求的方法
connection.setConnectTimeout(8000);//设置连接超时
connection.setReadTimeout(8000);//设置读取超时
InputStreamin = connection.getInputStream();//获取服务器返回的输入流
BufferedReaderreader = new BufferedReader(new InputStreamReader(in));//对输入流进行读取
StringBuilderresponse = new StringBuilder();
Stringline;
while((line = reader.readLine()) != null) {
response.append(line);//添加每一行的字符串
}
if(listener != null) {
//回调onFinish()方法
listener.onFinish(response.toString());
}
}catch (Exception e) {
if(listener != null) {
//回调onError()方法
listener.onError(e);
}
}finally {
if(connection != null) {
connection.disconnect();
}
}
}
}).start();//启动线程
}
}使用到了HttpCallbackListener接口来回调服务返回的结果,因此还需要添加这个接口:
public interface HttpCallbackListener {
voidonFinish(String response);
voidonError(Exception e);
}回调机制:http://hellosure.iteye.com/blog/1130176
实现的是Runnable接口: http://mars914.iteye.com/blog/1508429
HttpURLConnection方法:
http://www.cnblogs.com/guodongli/archive/2011/04/05/2005930.html
http://developer.android.com/reference/java/net/HttpURLConnection.html
http://wangzhaoli.blog.51cto.com/7607113/1288000
stringbuilder 主要是解决对字符串做频繁修改操作时的性能问题,有一个容量的概念,先分配好一定的内存,在字符串长度达到上限之前,全部在此内存内操作,不涉及内存的重新分配和回收。
而 string 每次修改都会重新创建一个对象。
打个比方:你开发一个程序,但每次增加、修改和删除代码都要找领导申请汇报,你说效率高不?
后来领导说,改你自己模块内的代码不用找我了,你的地盘你作主,于是...:lol
append()方法是动态的增加字符串。
新建Utility类,用来解析和处理数据的,“代号|城市,代换|城市”这种。
解析和返回省级数据
public synchronized static booleanhandleProvincesResponse(
CoolWeatherDBcoolWeatherDB, String response) {
if(!TextUtils.isEmpty(response)) {
String[]allProvinces = response.split(",");
if(allProvinces != null && allProvinces.length > 0) {
for(String p : allProvinces) {
String[]array = p.split("\|");
Provinceprovince = new Province();
province.setProvinceCode(array[0]);
province.setProvinceName(array[1]);
//将解析出来的数据存储到Province表
coolWeatherDB.saveProvince(province);
}
returntrue;
}
}
returnfalse;
}解析的原则就是先按逗号分隔,再按单竖线分隔,接着将解析出来的数据设置到实体类中,最后调用save()方法将数据存储到相应的表中。