Android 如何在AsyncTask中取消ProgressDialog
我正在使用一个Android 如何在AsyncTask中取消ProgressDialog,android,Android,我正在使用一个ProgressDialog在后台进程继续时显示,但后台进程完成后,ProgressDialog仍不会被取消 这是我的密码 private class async extends AsyncTask<String, Void, Boolean> { final ProgressDialog progressDialog = new ProgressDialog(getParent()); @Override protected Boolean
ProgressDialog
在后台进程继续时显示,但后台进程完成后,ProgressDialog仍不会被取消
这是我的密码
private class async extends AsyncTask<String, Void, Boolean> {
final ProgressDialog progressDialog = new ProgressDialog(getParent());
@Override
protected Boolean doInBackground(String... params) {
GetJson json = new GetJson();
boolean success = false;
JSONObject mJsonObject = json
.readJsonObject("url");
try {
success = mJsonObject.getBoolean("success");
} catch (Exception e) {
}
return success;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
if (progressDialog.isShowing())
progressDialog.dismiss();
}
}
}
@SuppressWarnings("static-access")
@Override
protected void onPreExecute() {
progressDialog.show(getParent(), "Working..", "Please wait...");
}
}
私有类异步扩展异步任务{
final ProgressDialog ProgressDialog=新建ProgressDialog(getParent());
@凌驾
受保护的布尔doInBackground(字符串…参数){
GetJson=new GetJson();
布尔成功=假;
JSONObject mJsonObject=json
.readJsonObject(“url”);
试一试{
success=mJsonObject.getBoolean(“success”);
}捕获(例外e){
}
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
if(progressDialog.isShowing())
progressDialog.disclose();
}
}
}
@抑制警告(“静态访问”)
@凌驾
受保护的void onPreExecute(){
progressDialog.show(getParent(),“正在工作…”,“请稍候…”);
}
}
在对话框上的onPostExecute()
方法调用disease()
。在对话框上的onPostExecute()
方法调用disease()
。您可以在异步任务的onPostExecute()
方法中调用progressDialog.disease()
您可以在AsyncTask
的onPostExecute()
方法中调用progressDialog.disease()
YourTask扩展AsyncTask的私有最终类{
private final class YourTask extends AsyncTask<Void, Void, Object> {
private ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(YourActivity.this, "Title", "Message", true);
}
@Override
protected Object doInBackground(final Void... params) {
// Doing something
}
@Override
protected void onPostExecute(final Object result) {
// Check result or something
dialog.dismiss();
}
}
私人对话;
@凌驾
受保护的void onPreExecute(){
dialog=ProgressDialog.show(YourActivity.this,“Title”,“Message”,true);
}
@凌驾
受保护对象doInBackground(最终无效…参数){
//做某事
}
@凌驾
受保护的void onPostExecute(最终对象结果){
//检查结果什么的
dialog.dismise();
}
}
您的任务扩展了AsyncTask的私有最终类{
私人对话;
@凌驾
受保护的void onPreExecute(){
dialog=ProgressDialog.show(YourActivity.this,“Title”,“Message”,true);
}
@凌驾
受保护对象doInBackground(最终无效…参数){
//做某事
}
@凌驾
受保护的void onPostExecute(最终对象结果){
//检查结果什么的
dialog.dismise();
}
}
我不知道,如果你解决了这个问题,可能是的
但是对于下一个用户,什么会有同样的问题(我现在也有这个问题)
问题在于你的申报
final ProgressDialog progressDialog = new ProgressDialog(getParent());
或者在你的“第二次”声明中
progressDialog.show(getParent(), "Working..", "Please wait...");
因为在第一个参数中放入了getParent参数(可能是MainActivity.this)
和调用show方法时所做的相同。
因此有两个父母。。如果在post execute中调用DISCLESH(),它将忽略第一个,而不是另一个,那么dialog.isShowing()等于false
所以重要的是只有1个!!!!!父内容..因此您可以在声明中使用以下内容分配内容:
new ProgressDialog(content);
或者你可以
ProgressDialog dialog=new ProgressDialog();
dialog.setMessage("Loading");
dialog.show(getParent());
然后把它扔了,一切都好了。
或者你可以:
ProgressDialog dialog=new ProgressDialog(getParent());
dialog.setMessage("Loading");
dialog.show();
但是千万不要在那里屈服两次父母、内容,不管怎样。我不知道,如果你解决了这个问题,可能是的
但是对于下一个用户,什么会有同样的问题(我现在也有这个问题)
问题在于你的申报
final ProgressDialog progressDialog = new ProgressDialog(getParent());
或者在你的“第二次”声明中
progressDialog.show(getParent(), "Working..", "Please wait...");
因为在第一个参数中放入了getParent参数(可能是MainActivity.this)
和调用show方法时所做的相同。
因此有两个父母。。如果在post execute中调用DISCLESH(),它将忽略第一个,而不是另一个,那么dialog.isShowing()等于false
所以重要的是只有1个!!!!!父内容..因此您可以在声明中使用以下内容分配内容:
new ProgressDialog(content);
或者你可以
ProgressDialog dialog=new ProgressDialog();
dialog.setMessage("Loading");
dialog.show(getParent());
然后把它扔了,一切都好了。
或者你可以:
ProgressDialog dialog=new ProgressDialog(getParent());
dialog.setMessage("Loading");
dialog.show();
但是千万不要屈服于父母、内容等任何东西。异步任务不应该处理任何对话框。在执行后阶段取消对话框很容易导致IllegalStateException,因为在取消对话框时,底层活动可能已经被销毁。销毁活动之前,将保存活动的状态。随后取消对话框将导致状态不一致 异步任务不应处理任何对话框。在执行后阶段取消对话框很容易导致IllegalStateException,因为在取消对话框时,底层活动可能已经被销毁。销毁活动之前,将保存活动的状态。随后取消对话框将导致状态不一致 伊戈尔和亚历克斯不同吗?@PMPareshMayani:是的,他们缺少代码示例。但是他的答案缺少一个解释。是的,因为我总是传递正确的用户名和密码,而且我还调试了sysout。Egor和Alex的不同吗?@PMPareshMayani:是的,他们缺少代码示例。但是,他的答案缺少解释。这是真的,因为我总是传递正确的用户名和密码,而且我还调试了sysout。请仅向我们显示您试图取消对话框的代码的相关部分。您是否检查过布尔值结果是否变为真?你根本不处理一个可能的异常,这是一件坏事。我已经检查了布尔值是否为真。因此在onPostExecute()
中,参数result
肯定为true
?检查progressDialog.isShowing()正在返回?请仅向我们显示您试图关闭对话框的代码的相关部分。您是否检查过布尔值结果是否为真?你不能对付一个可能的人