Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么不保存此首选项?_Android_Android Preferences_Android Settings - Fatal编程技术网

Android 为什么不保存此首选项?

Android 为什么不保存此首选项?,android,android-preferences,android-settings,Android,Android Preferences,Android Settings,据我所知,我在获取和设置时使用相同的键,但首选项没有保存。我肯定我错过了一些明显的东西 我的自定义对话框首选项,其中我加载当前首选项并设置新的首选项 public class SemesterDialogPreference extends DialogPreference { View view; SharedPreferences settings; String semester_id_key = this.getContext().getApplicationC

据我所知,我在获取和设置时使用相同的键,但首选项没有保存。我肯定我错过了一些明显的东西

我的自定义对话框首选项,其中我加载当前首选项并设置新的首选项

public class SemesterDialogPreference extends DialogPreference {

    View view;
    SharedPreferences settings;
    String semester_id_key = this.getContext().getApplicationContext().getString(R.string.pref_semester_id);

    DBAdapter db;

    @Override
    public void onBindDialogView(View view){
            this.view = view;
            settings = getSharedPreferences();

            int curSemesterId = settings.getInt(semester_id_key, 1);
            System.out.println("Incoming " + semester_id_key + " equals " + curSemesterId);

            // Here I do stuff...

            super.onBindDialogView(view);
    }


    public SemesterDialogPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        setDialogLayoutResource(R.layout.dialog_set_semester);

    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        super.onDialogClosed(positiveResult);

        // Do things and set newId


        System.out.println("new int for " + semester_id_key + " is " + newId);
        Editor editor = getEditor();
        editor.putInt(semester_id_key, newId);
        editor.commit();
    }
}
“我的首选项”屏幕的XML

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory android:title="@string/pref_header_settings" >
            <com.NsouthProductions.gradetrackerpro.SemesterDialogPreference
                    android:title="@string/pref_title_semester"
                    android:summary="@string/pref_summary_semester"

                    android:key="@string/pref_semester_id"
                    android:dialogMessage="Are you sure?"
                    android:positiveButtonText="Clear Questss"
                    android:negativeButtonText="Cancel"/>

    </PreferenceCategory>

</PreferenceScreen>

另外,我不明白为什么不在
getSharedReferences()
中包含参数。我想这就是android知道使用哪个文件的原因。

参考

像这样做:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("silentMode", mSilentMode);

  // Commit the edits!
  editor.commit();

您需要这样调用编辑器:

然后在下一部分:

settings = PreferenceManager.getDefaultSharedPreferences(this); // if this doesnt work, try getApplicationContext()

editor = settings.edit();
editor.putInt(semester_id_key, newId);
editor.commit();
注意:

建议尽可能使用
apply()
而不是
commit()
,因为它是异步的,但两者都可以工作。

以下是如何:

如果您在以下方面出现错误:

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
你可以做:

SharedPreferences settings = getActivity().getPreferences(PREFS_NAME, 0);
如果您试图从不同的活动着手,请执行以下操作:

SharedPreferences settings = getSharedPreferences(YourBaseActivity.PREFS_NAME, 0);

(不用说,你应该用你声明
SharedReferences
的活动名称替换
YourBaseActivity

你发布的代码只显示了对
SharedReferences
的读取-你在哪里写入它?在onDialogClosed中,我有
editor.putInt(Semmer\u id\u key,newId)
。我认为这在DialogPreference中不起作用。使用该版本的
GetSharedReferences
会给我一个错误。类型首选项中的方法GetSharedReferences()不适用于参数(String,int)谢谢。我按照您的建议将视图、设置和编辑器声明为字段。我按照您的建议在
onBindDialogView
中使用PreferenceManager初始化了设置。在
onDialogClosed
中,我按照您的建议使用了编辑器字段。现在我在
Putin
行上得到了一个NullPointerException:(这是对我有效的解决方案!谢谢。而且,我的主要活动显然是重置了此偏好,因此其他解决方案中的一个也可能有效。
SharedPreferences settings = getActivity().getPreferences(PREFS_NAME, 0);
SharedPreferences settings = getSharedPreferences(YourBaseActivity.PREFS_NAME, 0);