Java 正在获取方法getIntent()上的空指针异常。getCategories()
以下代码导致在方法“boolean java.util.Set.contains(java.lang.Object)”的空指针异常上获取空指针异常。我怀疑 getIntent().getCategories()包含(Intent.CATEGORY_启动器) 这是问题的根源 一些用户报告,当他们从主屏幕打开应用程序时,应用程序崩溃了。但从PlaystoreOpen按钮打开时不会崩溃 无法在我的任何设备上重现此问题,但Crashlytics上出现大量崩溃。知道发生了什么吗Java 正在获取方法getIntent()上的空指针异常。getCategories(),java,android,Java,Android,以下代码导致在方法“boolean java.util.Set.contains(java.lang.Object)”的空指针异常上获取空指针异常。我怀疑 getIntent().getCategories()包含(Intent.CATEGORY_启动器) 这是问题的根源 一些用户报告,当他们从主屏幕打开应用程序时,应用程序崩溃了。但从PlaystoreOpen按钮打开时不会崩溃 无法在我的任何设备上重现此问题,但Crashlytics上出现大量崩溃。知道发生了什么吗 private boole
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。是的,这是正确的,但您不应该一直依赖它。在很多情况下,任何队友都可以覆盖默认属性或配置。