2017-07-10 29 views
1

我在Google Play上有應用程序,在大多數設備上它工作得很好,但在一些三星(SM-G531H,SM-G530BT),華爲,聯想設備上它看起來像它崩潰getSharedPreferences調用。getSharedPreferences在某些設備上返回空指針豁免

我採取上下文的引用從onAttach(Context context)在片段方法(ⅰ不是要求getSharedPreferences之前onAttach

@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 

     mContext = context; 
     //init firebase analytics 
     mFirebaseAnalytics = FirebaseAnalytics.getInstance(context); 
    } 

我有構造sharedPreference助手類

public UserStats(Context mContext) { 

    CRASH HERE 

     sharedPreferences = mContext.getSharedPreferences(PREF_USER,Context.MODE_PRIVATE); 

     } 

這是在該方法中調用sharedPreference的片段

private void setGoal(int calories){ 
     new UserStats(mContext).setNewGoal(calories); 

     tvGoal.setText("Goal\n" + calories + " Cal"); 
    } 

任何想法爲什麼會發生?以及如何避免它? (我無法調試它,我收到Firebase控制檯中的崩潰)

+0

請發佈所有相關代碼。 – earthw0rmjim

+0

嘿,我看到[onAtttach()'調用不一致[如上所述](https://stackoverflow.com/questions/32077086/android-onattachcontext-not-called-for-api-23)。你檢查了嗎?我會說找尋替代品。 – Shaishav

+0

有趣,但我之前使用getActivity(),結果相同 –

回答

0

如果你在活動中使用getApplicationContext()

如果你在片段使用getContext()

如果您在適配器類中使用context並添加適配器構造函數的Context參數。

0

使用getActivity()替換mContext。它沒有找到片段的引用。所以,應用程序崩潰。

+0

我以前用過getActivity(),同樣的結果我收到相同的崩潰 –

2

使用getApplicationContext()始終如果有

+0

並不總是如此。如果您需要特定於活動的首選項,請使用活動上下文。 – BladeCoder

相關問題