Android SharedReferences未更新

Android SharedReferences未更新,android,settings,sharedpreferences,Android,Settings,Sharedpreferences,我仍然在安卓系统中受罪。我试图保存一个季节和年份来表示默认的“学期”,但我的更改不适用。我已经记录并确认我的settings.edit().putin()语句正在尝试输入我期望的值 但是当我重新加载屏幕时,我看到我的首选项使用了提供的默认值。为什么我的价值观不被接受?谢谢 公共类SetSemaster扩展了ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCr

我仍然在安卓系统中受罪。我试图保存一个季节和年份来表示默认的“学期”,但我的更改不适用。我已经记录并确认我的
settings.edit().putin()
语句正在尝试输入我期望的值

但是当我重新加载屏幕时,我看到我的首选项使用了提供的默认值。为什么我的价值观不被接受?谢谢

公共类SetSemaster扩展了ActionBarActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_set_semester);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new SetSemesterFragment()).commit();
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.set_semester, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

/**
 * A placeholder fragment containing a simple view.
 */
public static class SetSemesterFragment extends Fragment {

    View rootView;
    SharedPreferences settings;
    int YEAR_DEFAULT_VALUE = AddCourse.thisYear - AddCourse.baseYear;
    int SEASON_DEFAULT_VALUE = 0;

    String year_key;
    String season_key; 

    static int baseYear=2005;
    static int thisYear = Calendar.getInstance().get(Calendar.YEAR);



    public SetSemesterFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_set_semester,
                container, false);

        year_key = getResources().getString(R.string.year_pref_str);
        season_key = getResources().getString(R.string.season_pref_str);

        Button b = (Button) rootView.findViewById(R.id.apply_semester_btn);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                applySemester(v);
            }
        });

        settings = this.getActivity().getSharedPreferences(getResources().getString(R.string.main_prefs_file), 0);

        int curYear = settings.getInt(year_key, YEAR_DEFAULT_VALUE);
        int curSeason = settings.getInt(season_key, SEASON_DEFAULT_VALUE);

        System.out.println("stored values..." + curYear + "  " + curSeason);
        //Year Spinner
        ArrayList<String> years = new ArrayList<String>();
        for (int i = baseYear; i <= 2030; i++)
        {
            years.add(Integer.toString(i));
        }
        ArrayAdapter<String> adapter_year = new ArrayAdapter<String>(this.getActivity(),
                android.R.layout.simple_spinner_item, years);

        Spinner spinYear = (Spinner)rootView.findViewById(R.id.year_spinner);
        adapter_year.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinYear.setAdapter(adapter_year);
        spinYear.setSelection(curYear);

        //Semester Spinner
        Spinner spinner = (Spinner) rootView.findViewById(R.id.semester_spinner);
         // Create an ArrayAdapter using the string array and a default spinner layout
         ArrayAdapter<CharSequence> adapter_spinner = ArrayAdapter.createFromResource(this.getActivity(),
         R.array.semester_spinner, android.R.layout.simple_spinner_item);
         // Specify the layout to use when the list of choices appears
         adapter_spinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         // Apply the adapter to the spinner
         spinner.setAdapter(adapter_spinner);
         spinner.setSelection(curSeason);

        return rootView;
    }

    public void applySemester(View v){

        Spinner semesterSpin = (Spinner)rootView.findViewById(R.id.semester_spinner);
        Spinner yearSpin = (Spinner)rootView.findViewById(R.id.year_spinner);

        //ToStrings
        int year = yearSpin.getSelectedItemPosition();
        int season = semesterSpin.getSelectedItemPosition();
        System.out.println(year + " " + season);
        settings.edit().putInt(year_key, year);
        settings.edit().putInt(season_key, season);
        settings.edit().apply();
    }

}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u set\u学期);
如果(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
.add(R.id.container,new SetSemesterFragment()).commit();
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.set\u学期,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
/**
*包含简单视图的占位符片段。
*/
公共静态类SetSemesterFragment扩展了片段{
视图根视图;
共享引用设置;
int YEAR\u DEFAULT\u VALUE=AddCourse.thiswear-AddCourse.baseYear;
int seasure\u默认值=0;
串年键;
弦键;
静态int基准年=2005年;
static int thiswear=Calendar.getInstance().get(Calendar.YEAR);
公共SetSemesterFragment(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
根视图=充气机。充气(R.layout.fragment\u set\u),
货柜(虚假);;
year\u key=getResources().getString(R.string.year\u pref\u str);
seasure\u key=getResources().getString(R.string.seasure\u pref\u str);
按钮b=(按钮)rootView.findviewbyd(R.id.apply\u seurm\u btn);
b、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
applySemester(v);
}
});
设置=this.getActivity().getSharedReferences(getResources().getString(R.string.main\u prefs\u文件),0);
int curYear=settings.getInt(年份键,年份默认值);
int curSeason=settings.getInt(季节键,季节默认值);
System.out.println(“存储值…”+curYear+“”+curSeason);
//旋年器
ArrayList年份=新ArrayList();

对于(int i=基准年;i问题在以下三种陈述中:

settings.edit().putInt(year_key, year);
settings.edit().putInt(season_key, season);
settings.edit().apply();
SharedPrefences方法返回一个新编辑器。在此编辑器上执行的所有操作都保留在内存中,只有在调用apply方法时才会保存到文件中。 因此,每次调用edit()时,都会在新创建的编辑器上执行操作

要解决此问题,请使用以下代码替换上述3行:

SharedPreferences.Editor edit = settings.edit();
edit.putInt(year_key, year);
edit.putInt(season_key, season);
edit.apply();

非常感谢!这成功了。现在我学到了一些东西。