5

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

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

4

1 回答 1

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

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

于 2017-09-06T13:02:55.857 回答