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传入参数