嗨,我的应用程序中有AsyncTask,但我无法更改其setMessage
例如: -
private class ProgressTask1 extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog;
public ProgressTask1(MainActivity mainActivity) {
context = mainActivity;
dialog = new ProgressDialog(context);
}
private Context context;
protected void onPreExecute() {
this.dialog.setMessage("Checking system...");
this.dialog.setCancelable(false);
this.dialog.setTitle("Please Wait...");
this.dialog.setIcon(R.drawable.ic_launcher);
this.dialog.show();
}
现在我想要更改setmessage我尝试在doinbackground中添加它
protected Boolean doInBackground(final String... args) {
dothis1();
this.dialog.setMessage("one done...");
dothis2();
this.dialog.setMessage("two done...");
但是这会使应用程序强制关闭并且不要评价低,因为我尝试了我最好的搜索论坛,但能够解决这个问题,所以请求在这个不错的社区:)
任何人都可以提供帮助吗? :)
ERROR
05-13 23:36:34.899:E / AndroidRuntime(2454):引起: android.view.ViewRootImpl $ CalledFromWrongThreadException:只有 创建视图层次结构的原始线程可以触及其视图。
答案 0 :(得分:1)
您无法从后台更新用户界面。
请参阅AsyncTask.onProgressUpdate,根据您的后台进度更新用户界面。 :d
答案 1 :(得分:1)
1)使用default
和publishProgress (Progress... values)
。为此,您必须更改onProgressUpdate(...)
课程:
AsynTask
2)使用 private class ProgressTask1 extends AsyncTask<String, String, Boolean> {
//.......... //your init
@Override
protected Boolean doInBackground(String... params) {
//your background handle
//publish to change UI
String toShow = "your_string_here";
publishProgress(toShow);
//return ...; //your return value
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
//detect message and show it.
//this.dialog.setMessage(values[0]);
}
}
:
onPostExecute(....)