我有一个带有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没有关闭。
我做错了什么?
非常感谢您的回答!
答案 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();