我正在将布尔值保存到共享的首选项中,但是当我重新打开应用程序时,它不起作用。
这是代码
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。
答案 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);
}