(Android学习)ImageView设置异步加载的网络图片

来源:互联网 发布:淘宝卖家新手入门教程 编辑:程序博客网 时间:2024/05/17 06:51


只有在创建了View树的原始线程(一般为主线程)中才能操作树中的view

  1. AsyncTask的解决:

    新建类, extends AsyncTask<String,Void, Bitmap>

     

// AsyncTask实现类中对ImageView的弱引用

private final WeakReference<ImageView> imageViewReference;

 

//构造方法中实例化WeakReference对象

imageViewReference = new WeakReference<ImageView>(imageView);

 

//通过弱引用对构造方法中传入的ImageView实例进行操作

@Override

   protected void onPostExecute(Bitmap bitmap) {

      if (imageViewReference != null && bitmap != null) {

          final ImageView imageView = imageViewReference.get();

          if (imageView != null) {

             imageView.setImageBitmap(bitmap);

          }

      }

   }

2 Handler解决:

   *实例化一个Handler对象:

   Handler handler = new Handler() {

      super.handleMessage(msg);

      if(msg.what == SUCCESS) {   //SUCCESSint常量,值为0 

          imageView.setImageBitmap((Bitmap)msg.obj);

      }

};

*子线程中发送message

   run() {

      Bitmap bitmap = getImageFromNet(url); // 得到bitmap实例

      Message msg = new Message();

      msg.what = SUCCESS; // SUCCESSint常量,值为0

      msg.obj = bitmap;

      handler.sendMessage(msg);

   }

0 0
原创粉丝点击