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内存泄漏
  • 相关阅读:
    Spark的Shuffle机制
    Map Reduce的代码学习
    本地IDEA跑阿里云服务器Word Count
    HDFS的类学习和API基本操作
    本地IDEA(Windows)访问ECS服务器HBase
    本地IDEA访问ECS服务器HDFS
    阿里云ECS大数据环境搭建
    学会使用vue ui搭建项目
    用vue封装视频预览组件(手机端)
    项目中的部门使用级联选择器,编辑时初始化选中部门解决方案
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4742301.html
Copyright © 2011-2022 走看看