我正在尝试使用那里的软件包名称打开某些应用程序,为此我使用以下代码:
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());
}
但同样,不建议使用这种方式。