公司的项目今天测试登录的时候出现一个问题。 验证用户名 还有密码 这个过程是通过 AsyncTask 异步完成的, 当用户登录的时候会弹出一个ProgressDialog 如下图:
图片加载中..........
大家可以看到屏幕中央有一个ProgressDialog 提示正在验证账户,验证的过程是通过一个异步任务来完成的,但是如果这时我不停的点击Back键--》一定要不停的点,就会抛出一个异常,异常见下图。
这个异常的意思就是说没有一个 id为0的dialog 已经通过 showDialog()方法显示了。出现这个异常的原因是:当我们点击Back键的时候ProgressDialog 其实已经被结束了,它在当前的那个 Activity已经不存在了,然而后台的AsyncTask任务其实还在继续执行 。。然后我们又在onPostExecute() 方法取消显示这个Dialog,但是 这个时候 这个dialog已经没了啊,因为当我们点击Back键的时候 就会结束那个Dialog!! 找不到它了 所以抛出了这个异常。
解决办法就是 设置那个Dialog的onCancel事件,并且在onCancel方法里边判断 如果那个AsyncTask任务对象不等于null ,就结束它,代码片段如下。
private AccountVerifyAsyncTask mAccountVerifyTask;
if(mAccountVerifyTask == null || mAccountVerifyTask.getStatus() == AsyncTask.Status.FINISHED || mAccountVerifyTask.isCancelled()){
mAccountVerifyTask = (AccountVerifyAsyncTask) new AccountVerifyAsyncTask().execute(username,password);
}
class AccountVerifyAsyncTask extends AsyncTask<String ,Integer, Integer>{
@Override
protected void onPreExecute() {
showDialog(VERIFY_DIALOG_KEY);
}
@Override
protected Integer doInBackground(String... params) {
String username = params[0];
String password = params[1];
int result = AccountManager.instance().accountVerify(username, password);
return result;
}
@Override
protected void onPostExecute(Integer result) {
dismissDialog(VERIFY_DIALOG_KEY);
int code = result;
AccountManager.instance().handleVerifyResult(code);
if(AccountManager.SUCCESS == code){
AccountManager.QUERY_CANCELED = false;
onAccountChanged();
}
}
}
switch(id){
case VERIFY_DIALOG_KEY: {
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage(getResources().getString(R.string.account_verify_account));
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if(mAccountVerifyTask != null){
mAccountVerifyTask.cancel(true);
}
}
});
//mVerifyDialog = dialog;
return dialog;
}
- 大小: 46.2 KB
- 大小: 31.3 KB
分享到:
相关推荐
各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...
我们添加的按钮不论是用setNegativeButton还是用setPositiveButton添加的按钮,点击的时候,都会关闭对话框,但是我们的一 些实际需求,就需要保留这个对话框不动,例如输入校验码,...而关闭后弹出对话框,就很别扭了
Android Stduio的代码,为采用dialog的Activity,已经在android 4.3上的工业平板电脑上跑通。需要在手机端跑的,需要再确认各个手机品牌的权限。
底部弹出dialog 添加简单的进入 退出动画
android 自定义 dialog和activity 跳转的样式
博文 https://blog.csdn.net/Crystal_xing/article/details/85123009
Android之IOS风格Dialog对话框 Android之IOS风格Dialog对话框 Android之IOS风格Dialog对话框
在Android中经常会遇到需要使用Dialog风格弹出框的activity,首先我们可能会首先想到的是在XML布局文件中设置android:layout_height=”wrap_content”属性,让activity的高度自适应,显然这还不行,我们还需要为其...
android 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialogandroid 自定dialog
android自定义全屏dialog,可以全屏显示图片。
整理了常用的dialog 包括:single Choice Dialog Multiple choice Dialog Input Dialog Progress Dialog
Android activity、菜单及dialog、列表等常见UI源码,下面依次介绍各目录里的功能演示: activity_intent:activity的跳转1.不带返回值的跳转2.带返回值的跳转,intent的简单介绍。Bundle的简单介绍。 dialog...
android 自定义dialog 带有各种显示动画效果
Android_对话框(Dialog)大全 自定义
自定义Dialog(Activity样式改为Dialog)
Android高仿IOS的Dialog效果
Android自定义Dialog及Dialog进出动画
Android自定义显示内容的Dialog,有两种实现方式,一个继承Dialog,一个继承PopupWindow。
Two Step Picker Dialog For Android Description Two step picker dialog for Android that helps you easily pick nested data on android. Usage To use two step picker dialog you must add it as a ...