即使存在 try/catch 块,应用程序也会在空对象引用上出现“布尔 android.content.Intent.migrateExtraStreamToClipData()”

Posted

技术标签:

【中文标题】即使存在 try/catch 块,应用程序也会在空对象引用上出现“布尔 android.content.Intent.migrateExtraStreamToClipData()”【英文标题】:App crashing with 'boolean android.content.Intent.migrateExtraStreamToClipData()' on a null object reference' even when try/catch block is there [duplicate] 【发布时间】:2018-02-14 23:35:45 【问题描述】:

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

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 块,那么为什么异常没有被捕获,而是代码正在运行导致崩溃?

【问题讨论】:

【参考方案1】:

如果catch 范围内未隐含try catch 块,则无法在try catch 块中捕获NullPointerException。这是一个运行时异常,建议避免它,而不是处理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());

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

【讨论】:

以上是关于即使存在 try/catch 块,应用程序也会在空对象引用上出现“布尔 android.content.Intent.migrateExtraStreamToClipData()”的主要内容,如果未能解决你的问题,请参考以下文章

php try catch 捕获哪些错误

try catch执行过程分析

try catch执行过程分析

八月第四周

try catch finally语句块中存在return语句时的执行情况剖析

java中finally块儿是怎么工作的?有什么意义?