一段时间后,Android Java之后,异步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...");

这使应用程序关闭,并且不会对其进行低评分,因为我尝试了最好的和搜索的论坛,但能够解决这个问题,因此可以在这个不错的社区中进行解决:)

有人可以提供帮助吗?:)

错误

05-13 23:36:34.899:e/androidruntime(2454):引起: android.view.ViewRootimpl $ naterfromwrongthreadexception:仅 创建视图层次结构的原始线程可以触摸其视图。

ohmm,您不应从背景线程更新UI。要更新UI,您可以通过两种方式进行操作:

1)使用publishProgress (Progress... values)onProgressUpdate(...)。为此,您必须更改AsynTask类:

 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]);
    }
}

2)使用onPostExecute(....)

private class ProgressTask1 extends AsyncTask<String, Void, Boolean> {
    //.......... //your init
    @Override
    protected Boolean doInBackground(String... params) {
        //your background handle
        //return ...;//your return value
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        String toShow = "your_string_here";
        //this.dialog.setMessage(toShow);
    }
}

您无法从后台更新UI。

请参阅asynctask.onprogressupdate,以根据您的背景进度更新UI。:D

最新更新