Android中网络请求放在子线程中问题
2015-12-13 16:12
561 查看
android 4.0版本过后,耗时的请求都是放在子线程中。
android项目新建后会自动产生消息队列和消息轮询器,子线程通过发送新的消息,被轮询器发现,然后调用handler中的handleMessage()方法,实现更新UI。下面是下载网络图片例子:
android项目新建后会自动产生消息队列和消息轮询器,子线程通过发送新的消息,被轮询器发现,然后调用handler中的handleMessage()方法,实现更新UI。下面是下载网络图片例子:
public class Download_picActivity extends Activity { // 此方法在主线程中调用,可以更新UI Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { // 处理消息时需要知道是成功的消息还是失败的消息 switch (msg.what) { case 1: ImageView iv = (ImageView) findViewById(R.id.iv); // 将位图对象显示至imageView iv.setImageBitmap((Bitmap) msg.obj); break; case 0: Toast.makeText(Download_picActivity.this, "请求失败", 0).show(); break; default: break; } } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void click(View v) { Thread t = new Thread() { @Override public void run() { // 下载图片 // 1.确定网址 String path = "http://172.23.252.83:8080/superman.png"; try { // 2.把网址封装成一个url对象 URL url = new URL(path); // 3.获取链接对象,此时还没有建立连接 HttpURLConnection conn = (HttpURLConnection) url .openConnection(); // 4.对链接对象初始化 // 设置请求方法,注意大写 conn.setRequestMethod("GET"); // 设置连接超时 conn.setConnectTimeout(5000); // 设置读取超时 conn.setReadTimeout(5000); // 5.发送请求与服务器建立连接 conn.connect(); // 如果状态码等于200,说明请求成功 if (conn.getResponseCode() == 200) { // 获取服务器相应头中的流,流中的数据就是客户端请求的数据 InputStream is = conn.getInputStream(); //读取出流里的数据,并构造成位图对象 Bitmap bm = BitmapFactory.decodeStream(is); // ImageView iv = (ImageView) findViewById(R.id.iv); // 将位图对象显示至imageView // iv.setImageBitmap(bm); // 将消息发送至主线程的消息队列 Message msg = new Message(); // 消息对象可以携带数据 msg.obj = bm; msg.what = 1; handler.sendMessage(msg); } else { // Toast.makeText(Download_picActivity.this, "请求失败", // 0).show(); Message msg = handler.obtainMessage(); msg.what = 0; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }; t.start(); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories