0

我试图使用有包名打开某些应用程序,并为我使用此代码:应用与“布尔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块存在,那么为什么这个异常没有被抓到了,取而代之的是代码越来越运行导致崩溃?

回答

3

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()); 
} 

但同样,这种方法是不推荐的。

相关问题