繁体   English   中英

在getIntent().getCategories()方法上获取Null指针异常

[英]Getting Null Pointer Exception on method getIntent().getCategories()

以下代码导致在方法'boolean java.util.Set.contains(java.lang.Object)'Null指针上获取Null指针异常我猜测

getIntent().getCategories().contains(Intent.CATEGORY_LAUNCHER)

导致问题。

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

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

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

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

根据此声明,意图不一定必须具有一个或多个类别。 更多请点击链接

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

您需要先检查一下,getIntent().getCategories() null 是不是 null? 之后,您应该检查它是否包含Intent.CATEGORY_LAUNCHER

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM