在将一个活动导航到另一个活动时,SharedPreference会被清除

时间:2016-03-07 11:45:23

标签: android sharedpreferences

我使用SharedPreference来存储我的ID,但它不起作用。

当应用程序在Activity-A中启动时,我将id存储在prefs中,然后转到Activity-B。 在我的Activity-B中我有一个按钮,点击按钮我将回到Activity-A,我看到我存储的id不是优先的

活动-A

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

    id = getIntent().getStringExtra("id");


    editor = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0).edit();
    editor.putString("yourtextvalueKey", id);
    editor.commit();

    prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0);
    text= prefs.getString("yourtextvalueKey", null);
    System.out.println("text of id"+text);

活动-B

 backaro.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(ActivityB.this,ActivityA.class);
                startActivity(intent);

            }
        });

2 个答案:

答案 0 :(得分:1)

原因:您从意图中获取值并保存它。最初它被保存,你可以看到。但是,当您点击ActivityA按钮时返回ActivityB时,您不会将任何值传递给意图。这意味着id变为空并且保存。所以你得到了null

像这样更新您的代码

id = getIntent().getStringExtra("id");
if(id != null){
    editor = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0).edit();
    editor.putString("yourtextvalueKey", id);
    editor.commit();
}
prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0);
text= prefs.getString("yourtextvalueKey", null);
System.out.println("text of id"+text);

更新:您还可以在按钮点击时启动活动时传递意图值,您将获得该值。但是如果你不想发送任何价值,那么你需要先检查它。

答案 1 :(得分:-1)

只需用commit()

替换apply
id = getIntent().getStringExtra("id");

        editor = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0).edit();
        editor.putString("yourtextvalueKey", id);
        editor.commit();

        prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, 0);
        text= prefs.getString("yourtextvalueKey", null);
        System.out.println("text of id"+text);