AlertDialog setmessage 在 Asynctask 中不起作用

AlertDialog setmessage not working inside Asynctask

下面是我的代码,我试图通过 onProgressUpdate 方法在 Asyntask 中显示我的进度,但它没有显示在警报对话框中。仅显示初始消息。

 class DownloadFileFromURL extends AsyncTask<String, String, String> {

        private AlertDialog.Builder alert;
        private int progress = 0;
        /**
         * Before starting background thread Show Progress Bar Dialog
         */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            alert = new AlertDialog.Builder(context);
            alert.setTitle("Downloading..");
            alert.setMessage("1");
            alert.setCancelable(false);
            alert.show();
        }

        /**
         * Downloading file in background thread
         */
        @Override
        protected String doInBackground(String... f_url) {
            int count;
            try {
                URL url = new URL(f_url[0]);
                URLConnection conection = url.openConnection();
                conection.connect();

                // this will be useful so that you can show a tipical 0-100%
                // progress bar
                int lenghtOfFile = conection.getContentLength();

                // download the file
                InputStream input = new BufferedInputStream(url.openStream(),
                        8192);

                // Output stream
                OutputStream output = new FileOutputStream(file);

                byte data[] = new byte[1024];

                long total = 0;

                while ((count = input.read(data)) != -1) {
                    total += count;
                    // publishing the progress....
                    // After this onProgressUpdate will be called
                    publishProgress("" + (int) ((total * 100) / lenghtOfFile));

                    // writing data to file
                    output.write(data, 0, count);
                }

                // flushing output
                output.flush();

                // closing streams
                output.close();
                input.close();

            } catch (Exception e) {
                Log.e("Error: ", e.getMessage());
            }

            return null;
        }

        /**
         * Updating progress bar
         */
        @Override
        protected void onProgressUpdate(String... progress) {
            Log.d("Myapp","progress :"+progress[0]);
            alert.setMessage(""+progress[0]);
        }

        /**
         * After completing background task Dismiss the progress dialog
         **/
        @Override
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after the file was downloaded
}
}

因为我也在 onProgressUpdate 中写了一个日志来显示进度更新,所以打印了日志,但是 onProgressUpdate 中的 alert.setMessage 似乎没有将消息设置到我的警报对话框。

根据您的代码,alert 是一个 AlertDialog.Builder 而不是 AlertDialog 本身。这引起了我的关注,因为它可能不会更改的原因是因为您已经展示了构建器,但没有提供 AlertDialog。所以我尝试了一个简单的代码:

public class MainActivity extends AppCompatActivity {

    private AlertDialog.Builder alert;
    private AlertDialog ad;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        alert = new AlertDialog.Builder(this);
        alert.setTitle("Downloading..");
        alert.setMessage("1");
        alert.setCancelable(false);
        ad = alert.show();


        Log.d("SAMPLE", "SET MESSAGE 2");
        alert.setMessage("2");

        Log.d("SAMPLE", "SET MESSAGE 3");
        ad.setMessage("3");
    }

}

起初,我只是使用了alert.setMessage(这是AlertDialog.Builder),消息根本没有改变。但是放在一个AlertDialog然后设置AlertDialog实例的消息后,消息就变了。小心尝试这种方法。首先将 AlertDialog.Builder 传递给 AlertDialog,然后 setMessage 使用 AlertDialog 实例。

AlertDialog and AlertDialog.Builder 的文档。

在您的代码中,您忘记构建警报对话框。看到这个

AlertDialog alertDialog = alert.create();
    alertDialog.show();

您必须从 private AlertDialog.Builder alert;

创建一个警告对话框