2015-10-20 81 views
1

我在使用DialogFragment中的SharedPreferences時遇到了一些麻煩。我不斷收到sharedPreferences = getActivity().getSharedPreferences("pref", 0);的NullPointerException。 這裏是可能的基本代碼。SharedPreferences DialogFragment中的NullPointerException

public class ADialogFragment extends DialogFragment implements DialogInterface.OnClickListener { 
    SharedPreferences sharedPreferences; 
    public ADialogFragment(int a) { 
     sharedPreferences = getActivity().getSharedPreferences("pref", 0); 
     if (a == 0) { 
      saveToPref(0); 
     } else if (a == 1) { 
      saveToPref(1); 
     } else saveToPref(2); 
    } 
    private void saveToPref(int itemInt) { 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putInt(getString(R.string.item), itemInt); 
     editor.commit(); 
    } 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
    ... 
    } 
} 

我該如何解決?

+0

請學習片段生命週期...你沒有獲取片段沒有附加到它的活動... – Selvin

+0

你可以發佈堆棧跟蹤。它讓其他人更容易回答。 – shreyas

回答

4

您在片段構造太早打電話getActivity()並返回null。片段僅附加到片段生命週期中onAttach()或更高版本中的活動。

將需要共享首選項的代碼移到生命週期的後續階段。

另請注意,片段不應具有帶參數的構造函數。使用setArguments()將參數傳遞給片段。

+0

謝謝您提供詳細和翔實的答案。我會試試你的建議。 –

0

getSharedPreferences方法是Context對象的一個​​方法,所以只需從Fragment調用getSharedPreferences將不起作用。

所以你需要做的是像下面

sharedPreferences = this.getActivity().getSharedPreferences("pref", 0); 
+0

它仍然無法正常工作。 –

+0

@Selvin:可能是你過於聰明,我不是。 – KishuDroid

相關問題