AlertDialog setmessage在Asynctask中不起作用

2 android android-asynctask android-alertdialog async-onprogressupdate

下面是我的代码我试图通过onProgressUpdate方法显示我在Asyntask中的进度,但它不会显示在警报diaalog中.仅显示初始消息.

 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
}
}
Run Code Online (Sandbox Code Playgroud)

由于我还在onProgressUpdate中编写了一个显示进度更新的日志,因此打印了日志,但onProgressUpdate中的alert.setMessage似乎没有将消息设置为我的警报对话框.

AL.*_*AL. 5

根据你的代码,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");
    }

}
Run Code Online (Sandbox Code Playgroud)

起初,我只是使用了alert.setMessage(这就是AlertDialog.Builder),而且消息根本没有改变.但是在将其放入a AlertDialog然后设置AlertDialog实例的消息之后,消息发生了变化.小心尝试这种方法.然后使用实例AlertDialog.Builder将其传递给AlertDialog第一个.setMessageAlertDialog

AlertDialogAlertDialog.Builder的文档.

希望这会有所帮助.祝好运.:)