经过一段时间的android java后,AsyncTask setMessage

时间:2015-05-13 17:43:28

标签: java android android-asynctask

嗨,我的应用程序中有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:只有   创建视图层次结构的原始线程可以触及其视图。

2 个答案:

答案 0 :(得分:1)

您无法从后台更新用户界面。

请参阅AsyncTask.onProgressUpdate,根据您的后台进度更新用户界面。 :d

答案 1 :(得分:1)

哦,你不应该从后台线程更新UI。要更新UI,您可以通过两种方式完成:

1)使用defaultpublishProgress (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(....)