SharedPreferences总是显示相同的东西

时间:2017-03-18 12:14:43

标签: android sharedpreferences

因此,我尝试通过单击按钮将值保存到共享首选项,然后查看它在另一个活动中的值。 (基本上根据他们在activity1中按下的按钮设置activity2的背景)

保存代码:

    public void onClick(View v) {
    SharedPreferences.Editor background = getSharedPreferences("Background", MODE_PRIVATE).edit();
    if(btn1 == v)
    {
        background.remove("selectedBG");
        Toast.makeText(this, "btn1", Toast.LENGTH_SHORT).show();
        background.putInt("selectedBG", 1);
        background.commit();
    }
    if(btn2 == v)
    {
        background.remove("selectedBG");
        background.putInt("selectedBG", 2);
        Toast.makeText(this, "btn2", Toast.LENGTH_SHORT).show();
        background.commit();
    }
    if(btn3 == v)
    {
        background.remove("selectedBG");
        background.putInt("selectedBG", 3);
        Toast.makeText(this, "btn3", Toast.LENGTH_SHORT).show();
        background.commit();
    }
    if(btn4 == v)
    {
        background.remove("selectedBG");
        background.putInt("selectedBG", 4);
        Toast.makeText(this, "btn4", Toast.LENGTH_SHORT).show();
        background.commit();
    }

}

然后,这里的Toast 总是显示" selectedbackground: 0 ":

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.play);
    LLayout=(LinearLayout)findViewById(R.id.llayout);
    SharedPreferences background2 = getSharedPreferences("Background", MODE_PRIVATE);
    int chosenBackground = background2.getInt("selectedBg", 0);
    Toast.makeText(this,"chosenBackground:" + chosenBackground, Toast.LENGTH_SHORT).show();
    if (chosenBackground != 0) {
        if(chosenBackground==1)
        {
            LLayout.setBackgroundColor(Color.WHITE);
        }
        if(chosenBackground==2)
        {
            LLayout.setBackgroundColor(Color.rgb(34,34,34));
        }
        if(chosenBackground==3)
        {
            LLayout.setBackgroundColor(Color.rgb(51,68,85));
        }
        if(chosenBackground==4)
        {
            LLayout.setBackgroundColor(Color.rgb(68,34,17));
        }
    }
}

3 个答案:

答案 0 :(得分:1)

你的问题的答案是你在第二项活动中拼错了,在你使用的第一项活动中,#34; selectedBG"但在第二个" selectedBg"。它不一样,它区分大小写。在第二个中纠正" selectedBG"它应该工作。

答案 1 :(得分:1)

在这里使用SharedPreferences它真的很糟糕,如果我只是想要传递背景或者更确切地说是一种颜色,如果我正确看到它。只是意图传递它:

Intent intent = new Intent(this, Activity2.class);
intent.putExtra("EXTRA_BACKGROUND_ID", background);
startActivity(intent);

访问下一个活动的意图,例如。在onCreate()

String s = getIntent().getStringExtra("EXTRA_SESSION_ID"); 

@Updated

public class PreferencesUtils {

    private SharedPreferences sharedPrefs;
    private SharedPreferences.Editor prefsEditor;

    public static final String KEY_BACKGROUND = "BACKGROUND";

    public PreferencesUtils(Context context) {
        this(context, PREFS_DEFAULT);
    }

    public PreferencesUtils(Context context, String prefs) {
        this.sharedPrefs = context.getSharedPreferences(prefs, Activity.MODE_PRIVATE);
        this.prefsEditor = sharedPrefs.edit();
    }

    public int getValue(String key, int defaultValue){
        return sharedPrefs.getInt(key, defaultValue);
    }

    public boolean saveValue(String key, int value){
        prefsEditor.putInt(key, value);
        return prefsEditor.commit();
    }
}

PreferencesUtils preferencesUtils = new PreferencesUtils(this);
preferencesUtils.saveValue(PreferencesUtils.KEY_BACKGROUND, 1); //saveValue

preferencesUtils.getValue(PreferencesUtils.KEY_BACKGROUND, 0); //getValue, 

如果没有找到第二个arg就是侮辱

答案 2 :(得分:0)

使用if (!background2.contains("selectedBg")) 检查,首先是否存在密钥,如果不存在,则getInt无法创建密钥,因此始终返回默认值0.此外,您可以使用apply()而不是commit来检查是否已成功进行提交。请更多地调试代码看所有可能性

int chosenBackground=0;
if (!background2.contains("selectedBg"))
    {
        //is called once when  after you freshly install the app
        background2.putInt("selectedBG", 0);
    }

    else
    chosenBackground = background2.getInt("selectedBg", 0);