最近在学习Android, 在创建线程的时候操作视图出现了问题:

代码如下
  1. 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里面,而不能在主线程里面

下面是原来的代码:
代码如下
  1.  
  2.         if(view0.getAdapter() == null){
  3.             //System.out.println(view0.getAdapter());
  4.            
  5.             //loading
  6.             pDialog = ProgressDialog.show(Tabs1.this, loadingTitle, loadingBody, true, false);
  7.            
  8.             //新建进程
  9.             new Thread(){
  10.                 public void run(){
  11.                     Calculation.calculate(2);
  12.                     final String[] data = getResult("http://news.ifeng.com/rt-channel/rtlist_0/","utf-8",0);
  13.                     adapter = new ArrayAdapter<String>(Tabs1.this,android.R.layout.simple_list_item_1, data);
  14.                     view0.setAdapter(adapter);
  15.                     handler.sendEmptyMessage(0);
  16.                 }
  17.             }.start();
  18.         }

改进后的代码:
代码如下
  1.  ......
  2.         if(view0.getAdapter() == null){
  3.             //System.out.println(view0.getAdapter());
  4.            
  5.             //loading
  6.             pDialog = ProgressDialog.show(Tabs1.this, loadingTitle, loadingBody, true, false);
  7.            
  8.             //新建进程
  9.             new Thread(){
  10.                 public void run(){
  11.                     Calculation.calculate(2);
  12.                     final String[] data = getResult("http://news.ifeng.com/rt-channel/rtlist_0/","utf-8",0);
  13.                     adapter = new ArrayAdapter<String>(Tabs1.this,android.R.layout.simple_list_item_1, data);
  14.                    
  15.                     av = view0;
  16.                     handler.sendEmptyMessage(0);
  17.                 }
  18.             }.start();
  19.         }
  20.  ......
  21.  
    //handler
  22. private Handler handler = new Handler(){
  23.         public void handleMessage(Message msg){
  24.             pDialog.dismiss();
  25.             av.setAdapter(adapter);
  26.         }
  27.     };

这个错误就这样解决了

最后show下咱的第一个android程序,功能是从凤凰网抓取信息, 很丑的哈

  

随便说说

还可以输200