即使存在 try/catch 块,应用程序也会因空对象引用上的“boolean android.content.Intent.migrateExtraStreamToClipData()”崩溃

Ham*_*sir 5 android try-catch nullpointerexception android-package-managers activitynotfoundexception

我正在尝试使用软件包名称打开某些应用程序,为此我使用了以下代码:

public void openAppHavingPackageName(String packageName, String appName) {
        try {
            Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName);
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Log.e(TAG, e.getMessage());
        }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试打开手机中安装的应用程序时,它工作正常,但是当我尝试打开手机中没有的应用程序时,应用程序崩溃并出现以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference

在线上

startActivity(intent);

如您所见,我在try/catch那里有一个块,那么为什么没有捕获异常,而是运行代码导致崩溃?

Gui*_*FGL 4

NullPointerExceptiontry catch如果未在范围内隐含,则无法在块中捕获catch。这是一个运行时异常,建议避免它,而不是在try catch块中处理:

if(something != null) {
   doStuff();
}
Run Code Online (Sandbox Code Playgroud)

在您的代码中,要处理NullPointerException异常,您需要执行以下操作:

try {
    Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(packageName);
    startActivity(intent);
} catch (ActivityNotFoundException | NullPointerException e) {
    Log.e(TAG, e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

但同样,不推荐这种方式。