• 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内存泄漏
  • 相关阅读:
    使用 HTML5 可以做的五件很棒的事情
    分享最新20款非常棒的 CSS 工具
    最新17个紫色风格网页设计作品欣赏
    最新70佳很酷的名片设计作品欣赏
    50个优秀的名片设计作品欣赏
    推荐12个漂亮的CSS3按钮实现方案
    推荐10个很棒的 CSS3 开发工具
    30个复古风格的网页设计作品欣赏
    非常流行的十款 jQuery 插件推荐
    20个漂亮的WordPress作品集主题分享
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4742301.html
Copyright © 2020-2023  润新知