从零开始编写图片加载库(一)之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();        }    }}

运行结果:
enter image description here

0 0
原创粉丝点击