2011-06-23 74 views
0

我在方法中有以下代碼。這是整個方法:NullPointerException似乎不可能

private boolean isPlaceEligible(String eligibleId) { 

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 
    String current = sharedPrefs.getString(
      PrefsActivity.AUTO_INELIGIBLE_ID, PrefsActivity.AUTO_INELIGIBLE_ID_DEF); 
    return !eligibleId.equals(current); 

} 

eligibleId被稱爲非空字符串。 PrefsActivity.AUTO_INELIGIBLE_ID是一個String鍵,而PrefsActivity.AUTO_INELIGIBLE_ID_DEF是該鍵的默認字符串。

這些SharedPreferences的JavaDocs沒有說任何關於返回null的內容,但是我有一些市場控制檯的崩潰報告說這個方法在NullPointerException異常時崩潰。根據我得到的報告數量,我估計這發生在300個用戶中的一個,可能更少。其中兩人通過電子郵件告訴我這件事,並表示這件事發生在100%的時間。

任何想法?

+0

你傳遞eligibleId的方法之前捕獲空引用? –

+0

什麼線實際上是拋出NPE? – Haphazard

+0

任何機會在它作爲成員的Activity之前的上下文被調用之前(在onCreate之前?) – antlersoft

回答

2

的問題很可能是所傳遞的參數作爲該行的背景:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); 

這似乎爲解決方案:

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
+0

聽起來很有希望。我一直無法重現該問題,所以我將不得不發佈應用更新並查看客戶如何響應。謝謝。 – Tenfour04

+0

希望你不會再得到它們。 :) – faradaj

+0

他們仍然進來。他們變得很常見。我的一位客戶清除了他的應用程序數據,問題永久消失。共享偏好可能存在某種腐敗現象。 – Tenfour04