2011-11-02 19 views
0

我在其中一個名爲txtdownloadStatus.I的頁面中有一個textview,它具有下載一些數據的線程類,如果完成,我想顯示在放置在頁面中的textview中完成我對小輩說。在一個線程類中爲文本視圖分配值

我的用戶界面的名字是

download_manifest.txtdownloadStatus.setText("Completed Download"); 

是如下

public class thread_download extends Thread { 
    private download_helper downloadhelper; 
    private Context context; 
    public thread_download(Context context) { 
     this.context = context; 
    } 
    public void run() { 

      downloadhelper = new download_helper(this.context); 

      try { 
       downloadhelper.DownloadProblemAndReasonCode(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      try { 
       downloadhelper.DownloadNewManifest(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      try { 
       downloadhelper.DownloadNewMessages(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      downloadhelper.DeleteOldManifest(); 
      try { 
      download_manifest.txtdownloadStatus.setText("Cpmpleted"); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

} 

問題給出Thread類是,當我試圖在線程class.It顯示值設置爲TextView的如下面給出的錯誤

android.view.ViewRoot $ CalledFromWrongThreadException:只有創建視圖層次結構的原始線程可以觸及其視圖。

任何人都可以幫助我

回答

0

在android中,所有UI的東西都應該在UI線程上完成。您可以使用runOnUIThread方法,也可以在後臺線程中完成處理後,使用處理程序更新文本視圖。你的錯誤將被修復。

1

你必須在UIthread上運行它。因爲錯誤表示UI元素上的任何操作都必須在UIthread中執行。

您必須使用runOnUIThread()方法。

使用AsyncTask,它會自動爲您創建一個單獨的線程,並在UI線程上運行它的postExecutepreExecute方法。你不必做任何複雜的事情,如果你使用asyncTask,它就是爲我設計的。

相關問題