酷乐天气开发记录总结3

与服务器的交互

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


原文地址:https://www.cnblogs.com/lemonhome/p/4492646.html