2015-10-20 125 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

相关问题