如何更改progressDialog文本

时间:2018-01-16 18:20:42

标签: java android android-asynctask progressdialog

我有一个asynctask但是如果我实现了Thread.Sleep,那么我的应用程序崩溃,我不知道为什么,在onPreExecute我可以看到我的第一条消息,然后在两秒后它出现另一个我放入doInBackground,但它无法正常工作

private class sendMail extends AsyncTask<Void, Void, Void> {


        protected void onPreExecute() {
            dialog.setMessage("Please wait...");
            dialog.show();

        }

        // automatically done on worker thread (separate from UI thread)
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            dialog.setMessage("Downloading files...");

            new BackgroundTask().execute();

//MY DOWNLOADING METHODS STUFF

然后我在其他地方忽略了这个对话

日志

  

执行doInBackground()

时发生错误

2 个答案:

答案 0 :(得分:1)

您无法从后台线程访问UI元素,您可以在onProgressUpdate更新进度条,最重要的是,您需要在doInBackground中publishProgress(value)并使用onProgressUpdate进行更新。阅读有关AsyncTask here的更多信息。

示例代码:

class MyTask extends AsyncTask<Integer, Integer, String> {
        @Override
        protected String doInBackground(Integer... params) {
            for (; count <= params[0]; count++) {
                try {
                    Thread.sleep(1000);
                    publishProgress(count);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "Task Completed.";
        }
        @Override
        protected void onPostExecute(String result) {
            progressBar.setVisibility(View.GONE);
                txt.setText(result);
                btn.setText("Restart");
        }
        @Override
        protected void onPreExecute() {
            txt.setText("Task Starting...");
        }
        @Override
        protected void onProgressUpdate(Integer... values) {
            txt.setText("Running..."+ values[0]);
            progressBar.setMessage("Downloading files...");
            progressBar.setProgress(values[0]);
        }
    }

答案 1 :(得分:0)

使用UI线程在doInBackground中显示对话框消息,请参阅此https://stackoverflow.com/a/15757788/6626966