我有一个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
,它会自动为你创建一个单独的线程,postExecute
和preExecute
的方法在UI线程上运行。你不需要做任何复杂的事情,如果你使用asyncTask,我认为它是为这个目的而设计的
不能从UI线程以外的线程修改UI。您应该使用Handler、AsyncTask或runOnUiThread来修改UI。
在android中,所有UI的东西都应该在UI线程上完成。你可以使用runonuthread方法,或者当你在后台线程中完成处理时,使用处理程序来更新textview。