公司的项目今天测试登录的时候出现一个问题。 验证用户名 还有密码 这个过程是通过 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开发中,"悬浮Activity"通常指的是一个可以悬浮在其他应用之上,类似Dialog样式但功能更为丰富的Activity。这样的设计可以提供用户一种便捷的方式访问或操作应用,而无需完全退出当前正在使用的应用。悬浮...
在Android开发中,Dialog风格的Activity是一种特殊类型的窗口,它以对话框的形式展现,通常用于显示临时信息或者需要用户进行简单交互的场景。本项目是一个使用Android Studio编写的示例,实现了将一个Activity以...
在Android开发中,Dialog是一种常见的用户交互元素,用于在用户界面中显示临时信息或进行简单的交互操作。通常,当我们使用AlertDialog构建一个对话框时,它的默认行为是在用户点击按钮(如"确定"或"取消")后自动...
在Android开发中,底部弹出Dialog是一种常见的交互方式,它用于显示临时信息或者提供用户一些简短的操作选项。本文将详细讲解如何实现一个带有动画效果的底部弹出Dialog,并通过具体的代码实例进行演示。 首先,...
在Android开发中,有时我们可能需要将一个Activity展示为Dialog样式,以便于用户交互,比如在主界面之上显示一个半透明、大小可调整的小窗口。本文将深入探讨如何完美实现将Activity作为Dialog弹窗进行弹出,并且...
各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果以及各种dialog样式各种android弹出dialog效果...
### Android Dialog 输入框获取数据详解 #### 一、前言 在Android开发中,Dialog(对话框)是一种非常常见的UI组件,它可以帮助开发者快速构建出弹出式对话窗口,用于与用户进行简单交互,比如提示信息、确认操作...
在Android开发中,有时我们需要创建一个对话框式的效果,但又希望它具备Activity的功能和扩展性,这时可以将Activity的样式改为Dialog。本教程将详细讲解如何实现自定义Dialog(Activity样式改为Dialog)。 首先,...
在Android开发中,`Dialog`风格的`Activity`是一种常见的用户界面设计,它模拟了系统对话框的效果,用于展示临时信息或需要用户进行简单交互的情景。这种风格可以使应用程序的界面更加美观,用户体验更佳。下面我们...
在Android开发中,自定义Dialog和Activity的跳转样式是提升用户体验和应用独特性的重要手段。自定义Dialog可以使应用程序在提示用户信息或者进行选择时,展现出更符合应用风格的界面,而自定义Activity跳转样式则能...
在Android开发中,自定义Dialog是一种常见的用户交互方式,它能提供更为丰富的界面和功能,以满足特定场景下的需求。本教程将详细讲解如何创建一个全屏显示且带有动画效果的自定义Dialog,并结合相机和图片选择的...
在Android开发中,Dialog是一种常见的用户交互界面,用于显示临时信息或者进行简单的用户操作。而软键盘的管理和显示则是移动应用用户体验的关键因素之一。本文将深入探讨如何在Android中正确处理Dialog与软键盘的...
### Android对话框(Dialog)大全详解 #### 一、概述 Android中的对话框是一种常见的用户界面元素,用于在应用中向用户展示重要的信息或获取用户的反馈。Android提供了多种类型的对话框,包括但不限于警告对话框、...
在Android应用开发中,对话框(Dialog)是一种常见的用户交互元素,用于向用户展示临时信息、请求确认或者提供选项。标题提到的“Android-dialog库”是Android开发中的一个第三方库,它提供了一种灵活的方式,使得...
在Android开发中,自定义Dialog是一项常见的需求,它允许开发者根据应用的UI风格和功能需求进行个性化设计。本文将深入探讨如何自定义一个Android Dialog,特别是实现一个类似于支付密码输入框的功能,其中EditText...
在Android开发中,自定义对话框(Dialog)是提升用户体验和增强应用个性化的重要手段。一个精美的自定义Dialog不仅能够提供必要的信息,还能通过各种显示动画效果吸引用户的注意力,增加应用的趣味性和专业性。本篇...
本教程将详细介绍如何在Android中创建一个高度仿iOS风格的Dialog效果。 一、Dialog基础知识 Dialog是Android系统中一种重要的UI组件,用于在用户与主屏幕交互时显示临时信息或进行简单的决策。它浮现在应用窗口之上...
在Android开发中,有时我们需要在Dialog中展示动态内容,如GIF动图,来提供更丰富的用户交互体验。本文将详细讲解如何在Android Dialog中利用Glide库加载并播放GIF。 首先,Glide是一个非常流行的Android图片加载库...
在Android开发中,Dialog是一种非常常见的用户界面组件,它用于在主界面之上显示临时信息或者进行简单的交互。本文将详细讲解五种不同的方法来在Android应用中实现Dialog,并结合源码进行解析。 1. **AlertDialog**...