android HttpGet 另开线程获取网络数据问题
2015-08-19 15:13
525 查看
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内存泄漏
相关文章推荐
- 电脑经验--三星S4显示互联网连接缓慢,网络已被禁用
- 4.4网络图片查看器HttpURLConnection
- Nginx发布1.9.0版本,新增支持TCP代理和负载均衡的stream模块
- 自适应共振理论网络 ART
- httpClient多线程请求
- 在浏览器中输入一个网址,解析其背后发生的故事
- TCP/IP网络编程 学习笔记_12 --进程间通信
- TCP/IP网络编程 学习笔记_12 --进程间通信
- 安卓imageview获取网络图片
- linux查看网络状态
- 网络数据分析器
- httpd.conf 禁止运行PHP和html页面
- Linux网络编程下send到一个disconnected socket上
- springmvc使用和经验总结(长沙师说网络科技有限公司)
- 网络系统设计过程
- Android 判断用户2G/3G/4G移动数据网络
- ftp,http,https有啥区别?
- httpd源码分析
- ZOJ 3814 Sawtooth Puzzle (2014年牡丹江赛区网络赛F题)
- HTTP 错误 404.2 - Not Found