重新打开应用程序时,SharedPreferences不起作用

时间:2019-02-04 11:27:20

标签: android sharedpreferences

我正在将布尔值保存到共享的首选项中,但是当我重新打开应用程序时,它不起作用。

这是代码

public  static boolean isSeen;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.b);
        milestoneCheck();
}


public void milestoneCheck(){
    totalKm = (int) Float.parseFloat(TripsInfo.km.get(TripsInfo.userRank - 1));


    Log.d("test", "before" + isSeen);

    if (totalKm == 84 && !isSeen) {
        updateTrue(true);
        Log.d("test", "inside" + isSeen);
        isSeen=readFromSharedPrefs();
    }

    Log.d("test", "after" + isSeen);

}

private void updateTrue(Boolean value) {

    SharedPreferences sp = getSharedPreferences("inactivity", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.putBoolean("inactive", value);
    editor.apply();
}

public boolean readFromSharedPrefs() {
    SharedPreferences sharedPreferencesIn = getSharedPreferences("inactivity", Context.MODE_PRIVATE);

    return sharedPreferencesIn.getBoolean("inactive", false);
}

我希望在我重新打开我的应用后将其设置为true,并且再次为false。

1 个答案:

答案 0 :(得分:2)

isSeen始终为假,因为您忘记了从首选项中分配最后一个值。

当您从其他活动转到此活动时,由于您将其声明为静态,因此这仍然是正确的,这意味着该值只要应用程序存在就一直存在。

解决方案:

在陈述前添加isSeen=readFromSharedPrefs();

public void milestoneCheck(){
totalKm = (int) Float.parseFloat(TripsInfo.km.get(TripsInfo.userRank - 1));

  isSeen=readFromSharedPrefs();
  Log.d("test", "before" + isSeen);

 if (totalKm == 84 && !isSeen) {
    updateTrue(true);
    Log.d("test", "inside" + isSeen);
    isSeen=readFromSharedPrefs();
}

Log.d("test", "after" + isSeen);

}