gpt4 book ai didi

android - SharedPreferences 不适用于 Resume

转载 作者:太空狗 更新时间:2023-10-29 16:14:12 27 4
gpt4 key购买 nike

Android 中的共享首选项有问题 - 我希望能够将一些字符串(保存图片的 ID)作为下一次发布的最爱 - 它工作完美,它可以识别 ID 是否已经在共享首选项并在必要时将其删除,但是当我通过按下主页按钮停止应用程序(不终止应用程序进程)然后返回它时,它不再识别它了。如果我终止进程并重新启动应用程序,它会正常工作。

这是我的代码

MainActivity onCreate

    preferences = getSharedPreferences("favo", MODE_PRIVATE);
edit = getSharedPreferences("favo", MODE_PRIVATE).edit();

MainActivity onResume

@Override
protected void onResume() {
preferences = getSharedPreferences("favo", MODE_PRIVATE);
edit = getSharedPreferences("favo", MODE_PRIVATE).edit();
super.onResume();
}

我已经尝试在没有 onResume 的情况下执行此操作,但它不会改变结果。

更改共享首选项的方法

if (checkTheSharedPreferences(numberFavo)){
v.setBackgroundResource(R.drawable.favo);
edit.putString(pref, pref);
edit.apply();
showIt = "Zu Favoriten hinzugefügt";


}else{
v.setBackgroundResource(R.drawable.favo2);
edit.remove(pref);
edit.apply();
showIt = "Aus Favoriten entfernt";

}

如果我检查 SharedPreferences 的方法返回 true,这意味着该字符串不在 SharedPrefs 中并且可以添加,否则它将被删除,因为用户想要从他的收藏夹中删除它。

检查字符串是否在 Prefs 内的方法

public Boolean checkTheSharedPreferences(int number) {
SharedPreferences preferences = getSharedPreferences("favo", MODE_PRIVATE);
Map<String, ?> map = preferences.getAll();

for (Map.Entry<String, ?> entry : map.entrySet()) {
if (entry.getValue().toString().equals(bilderIDs.get(number))) {
return false;
}
}

return true;
}

如上所述,它运行完美,除非应用程序变得不可见/进入后台并在不重启的情况下再次打开。

提前致谢

编辑

如果我在 onResume 被调用后等待大约 30 秒似乎它可以工作,但实际上不可能等待,只要它在 UI 线程上并且用户可能按下按钮以删除/添加30 秒内的 SharedPref

最佳答案

SharedPreferences.Editor.apply() 是一个异步方法。它会将值存储在其他线程中。SharedPreferences.Editor.commit() 是一个同步方法。

if (checkTheSharedPreferences(numberFavo)){
v.setBackgroundResource(R.drawable.favo);
edit.putBoolean("myfav" + numberFavo, true);
edit.commit();
showIt = "Zu Favoriten hinzugefügt";
}else{
v.setBackgroundResource(R.drawable.favo2);
edit.remove("myfav" + numberFavo);
edit.commit();
showIt = "Aus Favoriten entfernt";
}
public Boolean checkTheSharedPreferences(int number) {
SharedPreferences preferences = getSharedPreferences("favo", MODE_PRIVATE);
return preferences.getBoolean("myfav" + number,false);
}
@Override
protected void onResume() {
super.onResume();
preferences = getSharedPreferences("favo", MODE_PRIVATE);
edit = getSharedPreferences("favo", MODE_PRIVATE).edit();
}

关于android - SharedPreferences 不适用于 Resume,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34693576/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com