Android:由于进度对话框,活动已泄漏窗口?

2024-03-13

我正在开发我的第一个 Android 应用程序,我想在用户单击我的应用程序中的登录按钮时显示进度对话框。所以我在应用程序中集成了 asynctask,所有操作(例如登录注销)都成功完成,但问题是,成功登录后,这给了我错误,例如 LoginActivity 由于进度对话框而泄漏了窗口。如何关闭进度对话框并更新 UI。

请参考以下代码并告诉我一些更改

以下是登录活动

public class LoginActivity extends SherlockActivity {
.................
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    sessionmngr = new SessionManager(this);
    //check the user login or not
    if (sessionmngr.isLoggedIn()) {
        Intent checkLoginIntnt = new Intent(this,ProjectFragActivity.class);
        startActivity(checkLoginIntnt);
    }
    setContentView(R.layout.activity_login);
    ........
}
// onclick listener when click on login activity

public void LoginToBookingScape(View v) throws JSONException {

    username = edtTxtUserName.getText().toString();
    userpsw = edtTxtUserPsw.getText().toString();

    if ((username.trim().length() > 0)&&(userpsw.trim().length() > 0)) {

        JsonWebService jsonWebs = new JsonWebService();
        jsonWebs.execute(loginUrl);

    }else {
        ............
    }   
}

以下是在 LoginActivity 中扩展 AsyncTask 的内部类

private class JsonWebService extends AsyncTask<String,Void,String> {

    private ProgressDialog dialogLogin;
    @Override
    protected String doInBackground(String... url) {

                httpPost.setEntity(new UrlEncodedFormEntity(params));
                ....
                inStream = httpEntity.getContent();
                .........
                return jsonResp;
    }

    @Override
    protected void onPostExecute(String jsonData) {
        //get string data from doinBackground
        try {
            JSONObject jsonObj = new JSONObject(jsonData);
            String key_login = jsonObj.getString(KEY_LOGIN);

            if (key_login.equalsIgnoreCase("0")) {
                .............

            }else {
                ....
                sessionmngr = new SessionManager(getApplicationContext());

                sessionmngr.createLoginSession(id,jsonObj.getString(KEY_UNAME), 
                        jsonObj.getString(KEY_UEMAIL));

                dialogLogin = ProgressDialog.show(LoginActivity.this, "Bookingscape", 
                        "Please Wait",true);
                dialogLogin.setIcon(R.drawable.icon);
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            Thread.sleep(4000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();

                Intent inteProj = new Intent(getApplicationContext(),           

                    ProjectFragActivity.class);
                startActivity(inteProj);
                finish();   
            }
        ........
    }
    @Override
    protected void onCancelled() {
        dialogLogin.dismiss();
        dialogLogin = null;
        super.onCancelled();
    }
}

}

我想在这里问一个问题

以上代码已优化且可重用。

提前致谢


问题是您正在转移到新活动而没有忽略进度对话框。这将导致泄漏窗口错误

我想你必须搬家dialogLogin.dismiss(); form onCancelled()阻止到onPostExecute阻止你的代码

您必须在进行另一项活动之前执行此操作。即之前

Intent inteProj = new Intent(getApplicationContext(),ProjectFragActivity.class);
startActivity(inteProj);

这行代码。我认为这会解决你的问题

一个疑问:你的 onPreExecute 在哪里?通常我在该块中显示进度代码并在 onPostExecute 中忽略它

通常流程是这样的onPreExecute-->doInBackground --->onPostExecute

EDIT :

onPreExecute:初始化您的 UI 组件(例如:对话)。在您的情况下ProgressDialog出现

doInBackground:之后onPreExecute块控制将转到此块。这里ProgressDialog继续工作

onPostExecute :在所有后台操作之后,控制权来到这里。在这里您可以忽略您的ProgressDialog并转到您的新活动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:由于进度对话框,活动已泄漏窗口? 的相关文章

随机推荐

  • 检测网络下拉菜单是否将显示在屏幕外

    我有一个基于 CSS 的简单多级下拉菜单 第二或第三级可能会超出可见窗口 具有某些分辨率和窗口大小的组合 如果某些预构建的菜单控件检测到这种情况 它们只会向左而不是向右打开下拉菜单 我如何测试 使用 JS jQuery 这种情况 您可以使用
  • Playbook 位于子目录中,而不是紧邻 group_vars

    有谁知道如何将剧本放入文件夹中 但共享相同的角色 group vars 以及通常位于根目录的其他内容 这就是我想要的 root dir group vars roles inventory playbooks my playbook yml
  • 如何强制 Jackson 将字段值反序列化为小写

    我有一个公开 REST 端点的 spring 应用程序 让我们将其命名为 doAction 作为请求 它消耗对象 class Person private String name private String email 一些客户端可以通过
  • matplotlib 获取轴相对刻度位置

    我知道我可以通过以下方式获得 y 刻度的位置ax get yticks 顺便说一句 这是获得它们的最佳 正确方法吗 但我需要相对于轴限制的刻度位置 即在 0 和 1 之间 获得这个的最好方法是什么 我试过ax get yticks tran
  • 通过引用传递 int 与通过值传递 int 的好处?

    通过引用而不是值传递整数是否有性能优势 我这样说是因为如果您通过引用传递 您将创建一个 4 字节指针 但如果您通过值传递 您无论如何都会创建该值的 4 字节副本 那么它们都多占用了 4 个字节 对吗 是否可以使用强制转换通过引用传递 int
  • AttributeRouting - 从 RouteData 获取操作名称的正确方法

    我最近开始为我的操作方法使用属性路由 并且正在努力从 RouteData 获取操作名称 和 或 id 下面是我如何使用属性的示例 Route Edit id int public ActionResult Edit int id 之前我使用
  • ReSharper PdbNavigator 在符号服务器上找不到调试信息

    我们设置了 TeamCity 来为内部组件创建 NuGet 包和符号源包 符号源包正确包含 dll pdb 和源代码 一旦 TeamCity 创建了包 它们就会发布到我们的 NuGet SymbolSource 服务器 在 ReSharpe
  • 如何使用 POI SS 打开 .xlsx 文件?

    我正在尝试使用 POI SS 使用此代码打开 xlsx 文件 取自http poi apache org spreadsheet quick guide html ReadWriteWorkbook http poi apache org
  • 如何在Java中从sql模式生成orm映射类

    我有一个现有的 db sql 模式文件 是否可以在需要时生成并重新生成 DAO 实体以及访问它所需的所有其他帮助程序 客户端类 我不介意它会是什么 hibernate 其他 jpa 或其他东西 假设您 其他人仍在寻找解决方案 我刚刚遇到了同
  • 模块函数、静态方法、类方法、无装饰器:哪个习惯用法更Pythonic?

    我是一名 Java 开发人员 时常使用 Python 我最近偶然发现本文 http dirtsimple org 2004 12 python is not java html其中提到了 Java 程序员在学习 Python 时常犯的错误
  • 玩具操作系统文件系统[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经在 assembly c 中开发了一个运行基本终端的基本内核 我已将其设置为使用 grub 运行 iso 我想继续使用这个操作系
  • 了解 Spring MVC 中 @ModelAttribute 和 @RequestAttribute 注解的使用

    我对 Spring MVC 还很陌生 目前我正在学习Spring MVC 展示 https github com spring projects spring mvc showcase 演示了 Spring MVC Web 框架的功能 我无
  • 如何以编程方式停止水平滚动?

    我在cocos2d的CCLayer中有一个UITextView textView 文本在水平和垂直方向上滚动 但是 我需要它仅垂直滚动和弹跳 如何以编程方式停止水平滚动 UITextView textView UITextView allo
  • 如何将图像放入颤振图像中

    https i stack imgur com w5mLQ png https i stack imgur com w5mLQ png 就像我们在大图片中看到的一个小圆形图像一样 以及如何如图所示排列文字 https i stack img
  • ZoneInfoNotFoundError:“未找到带有 utc 密钥的时区”

    当尝试在浏览器上加载我的网页时 我收到了消息 服务器发生错误 请联系管理员 当我回去检查我的终端时 我看到了这条消息 zoneinfo common ZoneInfoNotFoundError 未找到具有关键 UTC 的时区 我检查过但不知
  • 如何使用变量来避免为工作表中的所有列创建一组变量?

    当单元格更改时 我试图让我的工作表在两个方向上自动重新计算计划内的一组日期 该代码工作正常 但我需要添加更多列 而且我真的不想多次复制 粘贴 查找 替换负载 我相当确定我可以使用变量来做到这一点 只需查找列标识符并以某种方式将其输入代码中
  • 强制停止在外部线程上运行的 Java Files.copy()

    这里的答案似乎是 Java 8 之前的有效解决方案 如何在Java中取消Files copy https stackoverflow com q 17083896 但现在不行了 因为ExtendedCopyOption INTERRUPTI
  • Mysql查找文本中的关键字

    我有一个包含 10k 个关键字的 Mysql InnoDB 表 我想将它们与多个文本进行匹配 有些关键字有多个单词 我只想要完全匹配 例子 关键词 棕色狐狸 懒猫 狗 狐狸 兔子 文字 敏捷的棕色狐狸跳过了懒狗 我希望返回查询 棕色狐狸 狗
  • Apache RewriteCond(子域)

    我正在尝试将对子域的请求重定向到主域 IE xxx domain com blah xyz gt domain com blah xyz 我的重写条件工作正常xxx domain com但对于类似的事情xxx domain com 123
  • Android:由于进度对话框,活动已泄漏窗口?

    我正在开发我的第一个 Android 应用程序 我想在用户单击我的应用程序中的登录按钮时显示进度对话框 所以我在应用程序中集成了 asynctask 所有操作 例如登录注销 都成功完成 但问题是 成功登录后 这给了我错误 例如 LoginA