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

原创 2016年08月28日 20:57:33
今晚写进度条的时候用到了线程,想在子线程里面更新UI组件,给我报了一个

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


百度后已解决,记录下来作为备忘

在Android中ui组件不是线程安全的,因此只能在主线程里更新,得使用到Handler机制

代码如下

public class MainActivity extends AppCompatActivity {
    private Button tiao = null;
    private Button yuan = null;
    private ProgressDialog p = null;
    int iCon = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tiao = (Button)super.findViewById(R.id.tiao);
        yuan = (Button)super.findViewById(R.id.yuan);

        tiao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                p = new ProgressDialog(MainActivity.this);
                p.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                p.setTitle("正在下载");
                p.setIcon(R.drawable.b);
                p.setProgress(10);
                p.setIndeterminate(false);
                p.setCancelable(true);

                //让进度条显示
                p.show();
                Thread t1 = new Thread(){
                    @Override
                    public void run() {
                        try {
                            while (iCon <= 100) {
                                // 由线程来控制进度。
                                p.setProgress(iCon++);
                                Log.d("fwk----",Integer.toString(iCon));
                                Thread.sleep(500);
                                Message msg = new Message();
                                msg.what = iCon;
                                handler.sendMessage(msg);
                            }
                            p.cancel();
                        }catch(InterruptedException e){
                            e.printStackTrace();
                        }
                    }
                };
       }
    });

}
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            p.setMessage(iCon+"%");
     }
};



版权声明:本文为博主原创文章,未经博主允许不得转载。

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

解决方法 :
  • aikongmeng
  • aikongmeng
  • 2014年05月04日 16:52
  • 1075

错误:Only the original thread that created a view hierarchy can touch its views——Handler的深入解析

这个错误很常见,基本上写线程操作都遇到过这个错误。根本原因是view控件的线程安全问题,通俗点讲就是所有的更新UI操作都需要在主线程(也就是UI线程中完成),而不能在新开的子线程中操作。 基本思...
  • zsg2063
  • zsg2063
  • 2014年05月12日 16:45
  • 1406

Android进阶——Handler的应用之解决Only the original thread that created a view hierarchy can touch its views

解决错误:Only the original thread that created a view hierarchy can touch its views。
  • CrazyMo_
  • CrazyMo_
  • 2017年01月05日 15:57
  • 9833

android在工作线程中处理UI线程报错:Only the original thread that created a view hierarchy can touch its views.

解决办法:异步更新UIandroid要求只能在UI线程中更新UI,要想在其他线程中更新UI,就需要异步来处理。Android异步更新UI的四种方式:1.使用Handler消息传递机制; 2.使用As...
  • beibaokongming
  • beibaokongming
  • 2017年05月03日 16:28
  • 706

在工作线程中处理UI线程报错:Only the original thread that created a view hierarchy can touch its views.

如果将更新UI控件的代码写入到工作线程中便会报错, 例子如下: Runnable socketRun = new Runnable() { @Override public void ru...
  • shenyuemei
  • shenyuemei
  • 2013年09月04日 10:19
  • 16897

android中用线程更新UI,报错only the original thread that created a view hierarchy can touch its views

android开发中难免要更新UI,比如做一个时钟,
  • OrthocenterChocolate
  • OrthocenterChocolate
  • 2014年08月17日 19:07
  • 1377

android开发步步为营之56:Android开发常见问题技术点总结之一

android开发过程中常见问题技术点总结
  • figo0423
  • figo0423
  • 2015年04月27日 15:02
  • 1437

Handler: 更新UI的方法

总是感觉 android 中 UI 更新很让人纠结!自己小结一下,算是抛砖引玉。读这篇文章之前,假设你已经明白线程、Handler 的使用。 在文章的最后,附录一张草图,主要用于说明 Handle...
  • AndroidBluetooth
  • AndroidBluetooth
  • 2011年05月02日 15:42
  • 37665

Android开发中常见异常

ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy ...
  • jianesrq0724
  • jianesrq0724
  • 2017年02月14日 12:29
  • 8913

【Android开发经验】来来来,同学,咱们讨论一下“只能在UI主线程更新View”这件小事

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992    ”只能在UI主线程中更新View“。    这句话很熟悉吧?    来来,哥们,看一下下面的例子@Ov...
  • bz419927089
  • bz419927089
  • 2015年02月02日 17:35
  • 6613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Only the original thread that created a view hierarchy can touch its views.
举报原因:
原因补充:

(最多只允许输入30个字)