我的安卓应用程序崩溃了,尽管我捕获了导致崩溃的异常。

4

这是我的代码:

private ArrayList<PInfo> getSelectedPackages() {
    ArrayList<PInfo> apps = new ArrayList<PInfo>();
    for (String aname : Lock.getAllowedApps()) {
        try {
            PackageInfo pi = getPackageManager().getPackageInfo(aname, 0);
            PInfo newInfo = new PInfo(pi.applicationInfo, getPackageManager());
            apps.add(newInfo);
        } catch (NameNotFoundException e) {
            ErrorReporter.getInstance().handleSilentException(e);
        }
    }
    return apps;
}

导致程序崩溃的代码行为:

PackageInfo pi = getPackageManager().getPackageInfo(aname, 0);

这一点毫无意义,因为我已经捕获了错误。希望有人告诉我我做错了什么,或者这是Android的某种错误。下面是日志显示的内容:

android.content.pm.PackageManager$NameNotFoundException: com.teachersparadise.dinosaurscoloringbook at android.app.ContextImpl$ApplicationPackageManager.getPackageInfo(ContextImpl.java:1725) at com.nyanapps.lockfortots.free.Home.getSelectedPackages(Home.java:179)
2个回答

1

包名是由软件包管理器(PM)提供给我的。我从PM请求所有已安装应用程序的列表,并向用户显示,他们从列表中选择后,我保存他们的选择。然后,在另一个活动中,我读取保存的信息并生成图标和标签,这些图标和标签是我从PM请求的。我想象如果我包名写错了,那么在创建图标和标签时会抛出错误。这就是为什么我感到困惑,因为如果它是错误的,那么PM如何从同样错误的信息中给我图标和标签。 - ProgMasta
顺便感谢你提供的链接。我会阅读它,看看是否能学到新东西。 - ProgMasta

0

好的,我检查了我的导入,而我唯一导入的NameNotFoundException类是android.content.pm.PackageManager.NameNotFoundException。当我检查时,我真的希望我是错的,因为那将是一个简单的解决方法。非常感谢您的建议。我甚至没有想到要检查它,但现在如果我遇到类似的情况,这将是我首先要检查的东西。此外,我无法在自己的手机上重现此问题。我使用Google ACRA报告错误,只有我的应用程序用户遇到了问题。我甚至尝试在选择应用程序后卸载应用程序。 - ProgMasta
这样我的应用程序会尝试请求信息,但是如果使用相同的try...catch子句,则不会发生找不到信息的情况。这就是我认为代码正确的原因之一。 - ProgMasta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接