博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开发错误记录1:解决:Only the original thread that created a view hierarchy can touch its views....
阅读量:5012 次
发布时间:2019-06-12

本文共 1246 字,大约阅读时间需要 4 分钟。

今天在项目中要使用圆角头像,导入开源 CircleImageView ,然后setImageBitmap()

运行时就会发现,它会报一个致命性的异常:

· ERROR/AndroidRuntime(421): FATAL EXCEPTION: Thread-8  

· ERROR/AndroidRuntime(421): android.view.ViewRoot$CalledFromWrongThreadException:   

· Only the original thread that created a view hierarchy can touch its views. 

原因在于,Android系统中的视图组件并不是线程安全的,如果要更新视图,必须在主线程中更新,不可以在子线程中执行更新的操作。检查代码发现是在ui线程中调用的呀!后换成系统控件ImageView,一切正常,这是咋个回事?原代码:

public void setAvatar(final String imgurl) {

    if (imgurl == null || user == null) return;
            try {
                URL url = new URL(imgurl);
                user.setImageBitmap(BitmapFactory.decodeStream(url.openStream());
            } catch (Exception e) {
                e.printStackTrace();
            }
          }
    }).start();
}

后发现处理网络请求时,要用单独线程,把代码更成如下:

private  Bitmap bm = null;

public void setAvatar(final String imgurl) {
    if (imgurl == null || user == null) return;
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                URL url = new URL(imgurl);
                bm=BitmapFactory.decodeStream(url.openStream());
            } catch (Exception e) {
                e.printStackTrace();
            }
            activity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    user.setImageBitmap(bm);
                }
            });
        }
    }).start();
}

因为android开发,要碰到很多定制过的系统,有时会遇到有些品牌机可以正常运行,有些不能!

耗时,网络请求操作一定要单独开线程操作,这样就能减少不同机型兼容的问题!

转载于:https://www.cnblogs.com/ut2016-progam/p/5261363.html

你可能感兴趣的文章
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>
JSON.parse()和JSON.stringify()
查看>>
.net 常用正则表达式
查看>>
Java泛型中的标记符含义:
查看>>
初遇GitHub
查看>>
[C# 网络编程系列]专题八:P2P编程
查看>>
Jsの练习-数组常用方法 -forEach()
查看>>