从零开始编写图片加载库(一)之Handler+Thread图片下载
来源:互联网 发布:2016年非公经济数据 编辑:程序博客网 时间:2024/05/22 01:44
随着互联网信息高速公路的搭建,人们对网络也越来越依赖,网络数据的上传下载是每个app现在必须拥有的功能,本文简单的举一个网络图片并且显示的例子,后面我们会对这个例子不断的完善与改版。闲话少絮。
andorid从4.X开始主线程里面就不可以直接对网络进行操作,主要原因还是网络操作时间的不确定性,容易造成主线程阻塞。
08-16 15:23:57.267: E/AndroidRuntime(2715): android.os.NetworkOnMainThreadException08-16 15:23:57.267: E/AndroidRuntime(2715): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
报错原因就是不能在主线程里面进行网络操作,那么我们开一个子线程进行下载就可以了
package cn.sundroid.file;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends Activity implements OnClickListener { private Button save; private Button get; private ImageView image; Handler handler = new Handler() { public void handleMessage(android.os.Message msg) {//获取并显示bitmap Bitmap bitmap = (Bitmap) msg.obj; image.setImageBitmap(bitmap); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); save = (Button) findViewById(R.id.save); save.setOnClickListener(this); get = (Button) findViewById(R.id.get); get.setOnClickListener(this); image = (ImageView) findViewById(R.id.image); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.get: new MyThread().start(); break; case R.id.save: break; default: break; } } private class MyThread extends Thread { @Override public void run() { getFromNetWork(); } } private void getFromNetWork() { String url = "http://b.hiphotos.baidu.com/image/pic/item/0824ab18972bd4073cc730f479899e510fb309b2.jpg"; try { HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); conn.setConnectTimeout(5 * 1000); conn.setReadTimeout(20 * 1000); InputStream is = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(is);//将请求得到的bitmap通过message传给Handler Message message = new Message(); message.obj = bitmap; handler.sendMessage(message); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
运行结果:
0 0
- 从零开始编写图片加载库(一)之Handler+Thread图片下载
- 从零开始编写图片加载库(二)之AsyncTask图片下载
- 从零开始编写图片加载库(三)之线程池图片下载
- 从零开始编写图片加载库(四)之图片缓存MemoryCache
- 从零开始编写图片加载库(五)之图片缓存DiskCache
- Handler+thread 加载网络图片
- Handler+thread 加载网络图片
- Handler+thread 加载网络图片
- Handler+thread 加载网络图片
- Handler+thread 加载网络图片
- Android开发之异步详解(一)Thread+Handler
- AsyncTask加载之图片下载(2)
- Android多线程——Handler (一) 实现图片下载
- 从零开始编写深度学习库(一)SoftmaxWithLoss CPU编写
- android Thread 非线程更新UI界面(handler,runOnUiThread)解决图片加载慢的问题
- SoftReference+Thread进行图片加载(一)
- AsyncTask异步加载之图片下载
- android异步加载之Handler、AsyncTask(一)
- Swift的基本使用(2)函数的定义
- 【剑指offer】面试题3:二维数组的查找
- 重写(overwrite)与重载(overload)的区别
- 通用权限管理设计 之 数据权限
- 程序猿提高工作效率的15点技巧
- 从零开始编写图片加载库(一)之Handler+Thread图片下载
- javascript新手入门必读书籍推荐
- 第三方平台支付清算之---对账清算slq脚本
- 为UIWebView实现离线浏览
- [LeedCode OJ]#86 Partition List
- 通过rpm方式安装ipsvadm
- 零基础学Minecraft编程(图文版)——互动出版网
- OpenCVz中的几种角点检测算法
- 从零开始编写图片加载库(二)之AsyncTask图片下载