• 开发错误记录1:解决:Only the original thread that created a view hierarchy can touch its views.


    今天在项目中要使用圆角头像,导入开源 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 == nullreturn;
                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 == nullreturn;
        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开发,要碰到很多定制过的系统,有时会遇到有些品牌机可以正常运行,有些不能!

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

  • 相关阅读:
    Python基础-16生成器-迭代器
    Python基础-15模块-包-库
    Python基础-14异常处理
    Python基础-13面向对象
    Python基础-12解析式
    Python 入门日记(十)—— 文件和异常
    Python 入门日记(九)—— 类
    Python 入门日记(八)—— 函数
    Python 入门日记(七)—— 用户输入和 while 循环
    Python 入门日记(六)—— 字典
  • 原文地址:https://www.cnblogs.com/ut2016-progam/p/5261363.html
Copyright © 2020-2023  润新知