Android:进度对话框无效

时间:2014-08-31 14:22:59

标签: android multithreading show progressdialog

我想在需要将数据上传到服务器时显示ProgressDialog。

我已查看此问题Best way to show a loading/progress indicator? 最好的答案是

ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.show();
// To dismiss the dialog
progress.dismiss();

当我试图在我的代码中实现这一点时,没有任何显示! 我在这里做错了什么?!

这是我的代码

private void UpdateData()
{

    ProgressDialog progress = new ProgressDialog(this);
    progress.setTitle("Loading");
    progress.setMessage("Wait while loading...");
    progress.show();

    try
    {
        UpdateWSTask updateWSTask = new UpdateWSTask();
        String Resp = updateWSTask.execute().get();

    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    progress.dismiss();

}

2 个答案:

答案 0 :(得分:4)

使用ProgressDialog显示AsyncTask的正确方法是在onPreExecute()的{​​{1}}方法上显示对话框并将其隐藏在AsyncTask它的方法:

onPostExecute()

两者:onPreExecute()和onPostExecute()在主线程上运行,而名称建议的doInBackground()在后台线程上执行。

修改 在您的活动中,您想要调用AsyncTask,只需执行它:

 private class SampleTask extends AsyncTask<Void, Integer, String> {

     ProgressDialog progress = new ProgressDialog(YourActivity.this);

     protected Long doInBackground(Void... urls) {

        // execute the background task
     }

     protected void onPreExecute(){

     // show the dialog
        progress.setTitle("Loading");
        progress.setMessage("Wait while loading...");
        progress.setIndeterminate(true);
        progress.show();
     }

     protected void onPostExecute(String result) {
         progress.hide();
     }
 }

答案 1 :(得分:0)

更好的想法是使用AsyncTask类来做到这一点。您可以在preExecute和postExecute方法中处理UI工作,并在doInBackground方法中完成主要工作。很干净!

看来你已经这样做了。将对话框代码移动到asynctask类。您只需要对上下文的引用,并且可以为它提供自定义asynctask类的构造函数