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



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

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

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

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

在线

startActivity(intent);

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

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

if(something != null) {
doStuff();
}

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

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

但同样,不建议使用这种方式。

相关内容

  • 没有找到相关文章

最新更新