在线程类中给textview赋值失败



我有一个textview在一个名为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$ calledfromwrongthreadeexception:只有创建视图层次结构的原始线程可以触摸它的视图。

有人来帮我吗

你必须在uthread上运行它。因为错误提示UI元素上的任何操作都必须在线程中执行。

你必须使用runOnUIThread()方法。

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

不能从UI线程以外的线程修改UI。您应该使用Handler、AsyncTask或runOnUiThread来修改UI。

在android中,所有UI的东西都应该在UI线程上完成。你可以使用runonuthread方法,或者当你在后台线程中完成处理时,使用处理程序来更新textview。

最新更新