AsyncTask中的ProgressDialog忽略不起作用

时间:2014-06-17 22:27:35

标签: java android android-asynctask progressdialog

我有一个带有Service-classes的android-application与RestWebService进行通信。 Service-classes的方法使用AsyncTasks。我想在执行AsyncTask期间显示ProgressDialog。因此我有一个私人领域

public final class UserService extends Service {
    private static final String LOG_TAG = UserService.class.getSimpleName();
    private static UserService instance = null;
    private ProgressDialog progressDialog;

    public static UserService getInstance() {
        if (instance == null) {
            instance = new UserService();
        }

        return instance;
    }
...

}

它在方法showProgressDialog(Context ctx)中实例化:

private ProgressDialog showProgressDialog(Context ctx) {
    progressDialog = new ProgressDialog(ctx);
    progressDialog.setProgressStyle(STYLE_SPINNER);
    progressDialog.setCancelable(true);
    progressDialog.show();
    return progressDialog;
}

我在AsyncTask的onPreExecute上调用此方法:

@Override
protected void onPreExecute() {
    progressDialog = showProgressDialog(ctx);
}

并尝试在onPostExecute中关闭它:

@Override
protected void onPostExecute(HttpResponse<User> unused) {
        Log.v(LOG_TAG, "onPostExecute");
        progressDialog.dismiss();
}

我看到,执行onPostExecute方法,因为Log命令,但我的ProgressDialog没有关闭。

我做错了什么?

非常感谢您的回答!

2 个答案:

答案 0 :(得分:1)

如果asynctask是外部类,请确保在preExecute中执行progressdialog.show()之前已在构造函数中初始化了progressdialog对象。

答案 1 :(得分:0)

未正确显示 ProgressDialog 正确

显示后,请致电:

private ProgressDialog dialog;

// store the reference, "this" is the Context
dialog = ProgressDialog.show(this, "title...", "message..."); 

隐藏后,使用存储的参考

dialog.dismiss();