只有在創建了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);
}