ProgressDialog没有出现在onProgressUpdate方法中

时间:2016-04-26 09:52:59

标签: android android-asynctask progressdialog

在Asyntask中,我在Asyntask的全局变量中实例化一个进度对话框:

ProgressDialog progressDialog;

然后,在DoInBackGround中,我调用“publishProgress”,因此调用onProgressUpdate。 在onProgressUpdate中,我有以下代码:

this.progressDialog=new ProgressDialog(mActivity);
                this.progressDialog.setCancelable(true);
                this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                this.progressDialog.setTitle("Iniciando la comunicación");
                this.progressDialog.show();

我不知道为什么,progressDialog从未显示过。我尝试过使用相同上下文的Toast,它运行正常。虽然progressDialog没有。

--------- UPDATE --------------

最后,我已经使用通知来解决这个问题。

3 个答案:

答案 0 :(得分:3)

像这样组织你的AsyncTask

private class YourTask extends AsyncTask<String, String, String> {
    ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ...
        // show the dialog
        this.progressDialog=new ProgressDialog(mActivity);
            this.progressDialog.setCancelable(true);
            this.progressDialog.setProgressStyle(ProgressDialog. STYLE_HORIZONTAL);
           //this.progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            this.progressDialog.setTitle("Iniciando la comunicación");
            this.progressDialog.show();
    }

    @Override
    protected String doInBackground(String... urls) {

        ...
        publishProgress("" + progress);
        ...
    }

    protected void onProgressUpdate(String... progress) {        
      progressDialog.setProgress(Integer.parseInt(progress[0]));
    }

    @Override
    protected void onPostExecute(String result) {
        // dismiss the dialog           
        progressDialog.dismiss();
        ...
    }
}

您还希望在AsyncTask投放时公开进度,因此您需要STYLE_HORIZONTAL ProgressBar而不是STYLE_SPINNER ProgressBar

希望这个帮助

答案 1 :(得分:0)

两年前我看到了这个问题。主UI线程交互时有一些不可预测的行为。 我找到的解决方案是使用Thread代替AsyncTack

一个简单的例子:

new Thread(new Runnable() {
                    public void run() {

//background code to calculate
//for example
for(int i = 0; i < 100000000L; i++){
myHugeCalc(i);
final int prog = i;
runOnUiThread(new Runnable() {
                    public void run() {

                        pbtext.setText("My progress: " + prog);

                    }
                });
}

}).start();

答案 2 :(得分:0)

还有另一种方法可以做到这一点...... 当您从班级调用此同步过程时,请开始在其中显示进度对话框,onPostExecute取消它。 它会做你的工作...... 但最佳做法是在onPreExecute

中进行