簡體   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