AlertDialog setmessage在Asynctask中不起作用 [英] AlertDialog setmessage not working inside Asynctask

查看:59
本文介绍了AlertDialog setmessage在Asynctask中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Below is my code my trying to display my progress in Asyntask via onProgressUpdate method but it aint showing in the alert diaalog. Only the initial message is shown.

 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似乎未将消息设置为我的警报对话框.

As i have also written a log to show progress update in onProgressUpdate, the log is printed but the alert.setMessage in onProgressUpdate seems not set the message to my alert dialog.

推荐答案

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

As per your code, alert is an AlertDialog.Builder and not an AlertDialog itself. This raised a concern to me because the reason it might not be changing is because you already showed the builder, but not give to an AlertDialog. So I tried out a simple code:

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,然后使用AlertDialog实例传递setMessage.

At first, I just used the alert.setMessage (this is the AlertDialog.Builder), and the message did not change at all. But after putting it in an AlertDialog and then setting the message of the AlertDialog instance, the message changed. Care to try this approach out. Pass the AlertDialog.Builder to an AlertDialog first then, setMessage using the AlertDialog instance.

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

Hope this helps somehow. Good luck. :)

这篇关于AlertDialog setmessage在Asynctask中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆