Java DialogFragment中的SharedReferences NullPointerException

Java DialogFragment中的SharedReferences NullPointerException,java,android,fragment,sharedpreferences,dialogfragment,Java,Android,Fragment,Sharedpreferences,Dialogfragment,在DialogFragment中使用SharedReference时遇到一些问题。我一直在SharedReferences=getActivity()行中获取NullPointerException(“pref”,0)。 这是五月的基本代码 public class ADialogFragment extends DialogFragment implements DialogInterface.OnClickListener { SharedPreferences sharedPref

在DialogFragment中使用SharedReference时遇到一些问题。我一直在
SharedReferences=getActivity()行中获取NullPointerException(“pref”,0)。
这是五月的基本代码

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) {
    ...
    }
}

如何修复它?

方法GetSharedReferences是上下文对象的一个方法,因此仅从片段调用GetSharedReferences将不起作用

所以你需要像下面这样做

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

GetSharedReferences方法是上下文对象的一个方法,因此仅从片段调用GetSharedReferences将不起作用

所以你需要像下面这样做

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

在片段构造函数中调用
getActivity()
太早,它返回null。片段仅附加到片段生命周期中
onAttach()
或更高版本中的活动

将需要共享首选项的代码移动到生命周期的稍后阶段


还要注意的是,片段不应该有接受参数的构造函数。使用
setArguments()
将参数传递给片段。

您在片段构造函数中调用
getActivity()
太早,它返回null。片段仅附加到片段生命周期中
onAttach()
或更高版本中的活动

将需要共享首选项的代码移动到生命周期的稍后阶段


还要注意的是,片段不应该有接受参数的构造函数。使用
setArguments()
将参数传递给片段。

请学习片段生命周期。。。当片段未连接到它时,您无法获得活动…您可以发布stacktrace吗。这让其他人更容易回答。请学习。。。当片段未连接到它时,您无法获得活动…您可以发布stacktrace吗。这让其他人更容易回答。但它仍然不起作用。@Selvin:可能是你太聪明了,而我没有。它仍然不起作用。@Selvin:可能是你太聪明了,而我没有。谢谢你详细而翔实的回答。我试试你的建议.谢谢你详细而翔实的回答。我试试你的建议。