zoukankan      html  css  js  c++  java
  • 酷乐天气开发记录总结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()方法将数据存储到相应的表中。


  • 相关阅读:
    一致性算法—Paxos、Raft、ZAB
    分布式系统
    Alibaba开源组件-分布式流量控制框架sentinel初探
    Sentinel基本使用--基于QPS流量控制(二), 采用Warm Up预热/冷启动方式控制突增流量
    LinkedList实现基于LRU算法的缓存
    使用jdbc操作ClickHouse
    如何在js里引用php变量
    微信WeixinJSBridge API使用实例
    微信内置浏览器私有接口WeixinJSBridge介绍
    如何实现php手机短信验证功能
  • 原文地址:https://www.cnblogs.com/lemonhome/p/4492646.html
Copyright © 2011-2022 走看看