为了账号安全,请及时绑定邮箱和手机立即绑定

handler明明已经在主线程中调用了,为何更新不了UI线程的?android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

具体报错android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.



public void loadImage(final String path,final ImageView imageView){

//让imageView携带一个数据,由于gridView重写getView,是不断调用的

//要使用settag 将path保存, 加载成功后 设置image的图片前需要 gettag进行判断,防止图片的混乱

imageView.setTag(path);

if (mUIHandler==null) {

Looper mainLooper = Looper.getMainLooper();

mUIHandler=new Handler(mainLooper){

@Override

public void handleMessage(Message msg) {

/**

* 得到图片,为imageView设置图片

*/

//取出消息中的数据

ImageHolder holder=(ImageHolder) msg.obj;

Bitmap bm=holder.bitmap;

ImageView imageView=holder.imageView;

String path=holder.path;

//取出imageView所携带的数据,判断与holder中的path是否一致

//这是由于第一屏和第二屏之间的数据可能不清,为了防止图片设置混乱

if (imageView.getTag().toString().equals(path)) {

imageView.setImageBitmap(bm);

}

}

};

}

//根据path在缓存中取出bitmap

Bitmap bm=getBitmapFromLruCache(path);

//判断是否已经缓存好了,如果bitmap不为空,就可以为imageView设置图片了

if (bm!=null) {

/**

* 更新UI

*/

reflashBitmap(path, imageView, bm);

}else{

//缓存为空的话,说明需要去加载图片

addTask(new Runnable() {

@Override

public void run() {

//加载图片

//图片的压缩

//1、获取图片的大小

ImageSize imageSize=getImageViewSize(imageView);

//2、压缩图片

Bitmap bm=decodeSampledBitmapFromPath(path,imageSize.width,imageSize.height);

/**

* 将压缩的图片加入缓存

*/

addBimapToLruCache(path,bm);

/**

* 加入缓存后,进行回调,也就是准备发送消息给Handler更新UI

*/

reflashBitmap(path, imageView, bm);

/**

* release()释放许可,即添加一个许可,即

*/

mSemaphoreThreadPool.release();

}

});

}

}

http://img1.sycdn.imooc.com//565bf8ce0001d4ce08941451.jpg

正在回答

1 回答

已找到错误http://img1.sycdn.imooc.com//565e65880001524104610195.jpg

粗心大意,终毁一生啊T_T

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-仿微信图片选择器
  • 参与学习       29299    人
  • 解答问题       88    个

微信中的图片选择器综合案例不容错过,整体思路值得一学

进入课程

handler明明已经在主线程中调用了,为何更新不了UI线程的?android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信