无法为线程类中的textview赋值

时间:2011-11-02 10:01:41

标签: android

我在其中一个名为txtdownloadStatus的页面中有一个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();
            }
        }

}

问题在于,当我尝试将值设置为线程类中的textview时。它显示如下所示的错误

android.view.ViewRoot $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。

有人会帮助我

3 个答案:

答案 0 :(得分:1)

你必须在UIthread上运行它。因为错误说UI元素上的任何操作都必须在UIthread中执行。

您必须使用runOnUIThread()方法。

使用AsyncTask,它会自动为您创建一个单独的线程,并在UI线程上运行postExecutepreExecute方法。你不需要做任何复杂的事情,如果你使用asyncTask,它就是为了这个目的而设计的。

答案 1 :(得分:1)

您无法从UI线程以外的线程修改UI。您应该使用HandlerAsyncTaskrunOnUiThread来修改用户界面。

答案 2 :(得分:0)

在android中,所有的UI内容都应该在UI线程上完成。您可以使用runOnUIThread方法,也可以在后台线程中完成处理后,使用处理程序更新textview。你的错误将被修复。