代码之家  ›  专栏  ›  技术社区  ›  Mark Denom

为什么我的SharedReferences不在单击按钮时保存?

  •  1
  • Mark Denom  · 技术社区  · 7 年前

    所以我想给我的生活增添一些价值 SharedPreferences 但每次我点击按钮,它都会显示默认值 00

    private static final String SHARED_FREFS = "sharedPrefs";
    private static final String STATE = "state";
    

    这是按钮点击事件

    public void onClick(View v) {
                    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_FREFS, MODE_PRIVATE);
                    SharedPreferences.Editor editor =  sharedPreferences.edit();
    
                    int currentTime = Calendar.getInstance().getTime().getMinutes();
                    String eh = sharedPreferences.getString(STATE,  "00");
    
                    if(!Integer.toString(currentTime).equalsIgnoreCase(sharedPreferences.getString(STATE,  "00"))){
                        GetData();
                        editor.putString(STATE, Integer.toString(currentTime));
                        Log.e("ATTENTION!:", "METHOD HAS BEEN FIRED!");
                    }
                }
            });
    

    我试图将当前分钟存储在那里,但它没有这样做。 sharedPrefs ?

    3 回复  |  直到 7 年前
        1
  •  5
  •   AskNilesh    7 年前

    为什么我的SharedReferences不在单击按钮时保存?

    因为您忘了将更新保存到 SharedPreferences

    你需要使用 editor.apply(); editor.commit(); 在将数据添加到 共享引用

    public void onClick(View v) {
                    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_FREFS, MODE_PRIVATE);
                    SharedPreferences.Editor editor =  sharedPreferences.edit();
    
                    int currentTime = Calendar.getInstance().getTime().getMinutes();
                    String eh = sharedPreferences.getString(STATE,  "00");
    
                    if(!Integer.toString(currentTime).equalsIgnoreCase(sharedPreferences.getString(STATE,  "00"))){
                        GetData();
                        editor.putString(STATE, Integer.toString(currentTime));
                        editor.apply();
                        Log.e("ATTENTION!:", "METHOD HAS BEEN FIRED!");
                    }
                }
            });
    
        2
  •  4
  •   halfer Jatin Pandey    6 年前

    当我看到你的代码时,你总是需要使用 editor.commit() editor.apply() 在共享首选项编辑器中添加数据后。应使用哪一种,请参见以下内容:

    commit() -此方法同步运行,这意味着:

    1. 并且总是给出反馈。

    apply()

    1. 不是线程安全的。
    2. 并且不提供反馈。

        3
  •  3
  •   Niranj Patel    7 年前

    总是 commit apply

    mEditor.commit();