您的位置:首页 > 理论基础 > 计算机网络

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

2015-01-12 17:02 239 查看


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

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) {   //SUCCESS为int常量,值为0 

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

      
}

};

*子线程中发送message:

   
run() {

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

      
Message msg = new Message();

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

      
msg.obj = bitmap;

      
handler.sendMessage(msg);

   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息