zoukankan      html  css  js  c++  java
  • android HttpGet 另开线程获取网络数据问题

    android跨线程通讯可以使用android.os.Handler-android.os.Message这两类对象完成。

    public static void getResultForHttpGet(final String url,final Handler handler) throws ClientProtocolException, IOException{
    new Thread(){
    @Override
    public void run() {
    String result="";
    HttpGet httpGet=new HttpGet(url);//
    HttpResponse response=new DefaultHttpClient().execute(httpGet);
    int statusCode=response.getStatusLine().getStatusCode();
    if(statusCode==200){
    HttpEntity entity=response.getEntity();
    result=EntityUtils.toString(entity, HTTP.UTF_8);
    }
    Message msg=handler.obtainMessage(statusCode, result);
    msg.sendToTarget();
    }
    }.start();

    }
    原获得返回值之后的代码写到 handler参数对象重写的handleMessage方法中,如果直接发起请求的类不是Activity,可以自定义接口来将信息传递给Activity。
    private Handler handler1 = new MyHandler();
    private class MyHandler extends Handler{
    public void handleMessage(Message msg) {
    int statusCode = msg.what;
    if(statusCode==200){
    String result = msg.obj.toString();
    //do your business
    }else{
    // throw exception or show error message
    }
    }
    };
    private Handler handler2 = new MyHandler2();
    private class MyHandler2 extends Handler{
    public void handleMessage(Message msg) {
    int statusCode = msg.what;
    if(statusCode==200){
    String result = msg.obj.toString();
    //do other business
    }else{
    // throw exception or show error message
    }
    }
    };
    此外handler的post(Runnable r)方法也是跨线程操作的重要方法

    //注意,若如此做,在Activity中构建的handler对象在Activity销毁后仍然有可能接收消息并执行handleMessage方法,应设法避免。关键字:handler内存泄漏
  • 相关阅读:
    Python 散点图
    python matplotlib 图例设置 legend() 参数详解
    python matplotlib 设置背景色、轴脊、网格线
    python 可视化有随机噪声得到的一个“异或”数据集的二维分布
    Python 中的逻辑值
    python 计算等差数列和的两种循环方式
    Python 及其第三方库的版本查看
    R语言 中的 paste/paste0 函数
    R语言 文件及路径操作
    Python 热力图
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4742301.html
Copyright © 2011-2022 走看看