与服务器的交互
新建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()方法将数据存储到相应的表中。