DialogFragment 中的 SharedPreferences NullPointerException
SharedPreferences NullPointerException in DialogFragment
我在使用 DialogFragment 中的 SharedPreferences 时遇到了一些问题。而且我一直在行 sharedPreferences = getActivity().getSharedPreferences("pref", 0);
中收到 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) {
...
}
}
我该如何解决?
getSharedPreferences 方法是 Context 对象的一个方法,因此仅从 Fragment 调用 getSharedPreferences 是行不通的。
所以你需要像下面那样做
sharedPreferences = this.getActivity().getSharedPreferences("pref", 0);
您在片段构造函数中过早调用 getActivity()
,它 returns 为空。片段仅附加到片段生命周期 onAttach()
或更晚的 activity。
将需要共享首选项的代码移至生命周期的后期阶段。
另请注意,片段不应具有带参数的构造函数。使用setArguments()
给fragments传入参数
我在使用 DialogFragment 中的 SharedPreferences 时遇到了一些问题。而且我一直在行 sharedPreferences = getActivity().getSharedPreferences("pref", 0);
中收到 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) {
...
}
}
我该如何解决?
getSharedPreferences 方法是 Context 对象的一个方法,因此仅从 Fragment 调用 getSharedPreferences 是行不通的。
所以你需要像下面那样做
sharedPreferences = this.getActivity().getSharedPreferences("pref", 0);
您在片段构造函数中过早调用 getActivity()
,它 returns 为空。片段仅附加到片段生命周期 onAttach()
或更晚的 activity。
将需要共享首选项的代码移至生命周期的后期阶段。
另请注意,片段不应具有带参数的构造函数。使用setArguments()
给fragments传入参数