Java 正在获取方法getIntent()上的空指针异常。getCategories()

Java 正在获取方法getIntent()上的空指针异常。getCategories(),java,android,Java,Android,以下代码导致在方法“boolean java.util.Set.contains(java.lang.Object)”的空指针异常上获取空指针异常。我怀疑 getIntent().getCategories()包含(Intent.CATEGORY_启动器) 这是问题的根源 一些用户报告,当他们从主屏幕打开应用程序时,应用程序崩溃了。但从PlaystoreOpen按钮打开时不会崩溃 无法在我的任何设备上重现此问题,但Crashlytics上出现大量崩溃。知道发生了什么吗 private boole

以下代码导致在方法“boolean java.util.Set.contains(java.lang.Object)”的空指针异常上获取空指针异常。我怀疑

getIntent().getCategories()包含(Intent.CATEGORY_启动器)

这是问题的根源

一些用户报告,当他们从主屏幕打开应用程序时,应用程序崩溃了。但从PlaystoreOpen按钮打开时不会崩溃

无法在我的任何设备上重现此问题,但Crashlytics上出现大量崩溃。知道发生了什么吗

private boolean hasPendingIntent() {
        return getIntent() != null && getIntent().getCategories().contains(Intent.CATEGORY_LAUNCHER) && getIntent().getData() != null;
    }

您应该在getIntent()中检查空类别; e、 g:if(getIntent()!=null&&getIntenger().getCategories()!=null){}


这将解决空指针的问题。您可能需要验证空类别列表以保留当前逻辑。

此代码块不是空安全的。因为,在检查集合是否为null之前,您正在尝试从集合中获取数据

根据本声明,意图不一定必须有一个或多个类别。有关更多信息,请参阅

无论过滤器中声明了哪些类别,没有类别的意图始终通过此测试

首先需要检查getIntent().getCategories()是否为null?之后,您应该检查它是否包含
Intent.CATEGORY\u LAUNCHER

getIntent()  != null && 
getIntent().getCategories() != null && getIntent().getCategories().contains(Intent.CATEGORY_LAUNCHER) && 
getIntent().getData()

使用前添加空点检查,尝试更改以下代码:

    private boolean hasPendingIntent() {
        boolean b = false;
        if (getIntent() != null && getIntent().getCategories() != null && getIntent().getData() != null) {
            b = getIntent().getCategories().contains(Intent.CATEGORY_LAUNCHER);
        }
        return b;
    }

如果get category不为null,那么getCategories是否可能为null??因为所有意图都有正确的类别?我已经更新了答案,也许它可以回答您的查询。Android会自动将类别应用于传递给startActivity()和startActivityForResult()的所有隐式意图。因此,如果getIntent()不为Null,那么getIntent().getCategories()也应该不为Null。是的,这是正确的,但您不应该一直依赖它。在很多情况下,任何队友都可以覆盖默认属性或配置。