应用与“布尔android.content.Intent.migrateExtraStreamToClipData()”上一个空对象引用”即使try/catch块是有崩溃
问题描述:
我试图使用有包名打开某些应用程序,并为我使用此代码:应用与“布尔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
不能在try catch
块中捕获,如果它在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());
}
但同样,这种方法是不推荐的。