"android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view"的解决方法
- 2011-12-12 12:02 - fzblog.net
- Views: 251
- Comments: 1
- Android
最近在学习Android, 在创建线程的时候操作视图出现了问题:
找了好久资料才知道,线程里面操作视图要在Handler里面,而不能在主线程里面
下面是原来的代码:
改进后的代码:
这个错误就这样解决了
最后show下咱的第一个android程序,功能是从凤凰网抓取信息, 很丑的哈

代码如下
- 09-20 08:42:44.234: ERROR/AndroidRuntime(399): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
找了好久资料才知道,线程里面操作视图要在Handler里面,而不能在主线程里面
下面是原来的代码:
代码如下
-
- if(view0.getAdapter() == null){
- //System.out.println(view0.getAdapter());
-
- //loading
- pDialog = ProgressDialog.show(Tabs1.this, loadingTitle, loadingBody, true, false);
-
- //新建进程
- new Thread(){
- public void run(){
- Calculation.calculate(2);
- final String[] data = getResult("http://news.ifeng.com/rt-channel/rtlist_0/","utf-8",0);
- adapter = new ArrayAdapter<String>(Tabs1.this,android.R.layout.simple_list_item_1, data);
- view0.setAdapter(adapter);
- handler.sendEmptyMessage(0);
- }
- }.start();
- }
改进后的代码:
代码如下
- ......
- if(view0.getAdapter() == null){
- //System.out.println(view0.getAdapter());
-
- //loading
- pDialog = ProgressDialog.show(Tabs1.this, loadingTitle, loadingBody, true, false);
-
- //新建进程
- new Thread(){
- public void run(){
- Calculation.calculate(2);
- final String[] data = getResult("http://news.ifeng.com/rt-channel/rtlist_0/","utf-8",0);
- adapter = new ArrayAdapter<String>(Tabs1.this,android.R.layout.simple_list_item_1, data);
-
- av = view0;
- handler.sendEmptyMessage(0);
- }
- }.start();
- }
- ......
-
//handler - private Handler handler = new Handler(){
- public void handleMessage(Message msg){
- pDialog.dismiss();
- av.setAdapter(adapter);
- }
- };
这个错误就这样解决了
最后show下咱的第一个android程序,功能是从凤凰网抓取信息, 很丑的哈




随便说说