我正在尝试在共享首选项中存储和检索值,但是第一次打开应用程序时,共享首选项值为NULL。从下次开始,它会显示上一个键的值。
这是我的代码,
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
Set<String> set;
sharedPreferences = getApplicationContext().getSharedPreferences(mypreference, Context.MODE_PRIVATE);
databaseReferenceImages.child(postkey).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
SharedPreferences.Editor editor = sharedPreferences.edit();
Set<String> sharedlist = new HashSet<String>();
sharedlist.addAll(second);
editor.putStringSet("notifications", sharedlist);
editor.apply();
for (String a : sharedlist) {
Log.d("thesharedlist", a);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
set = sharedPreferences.getStringSet("notifications", null);
if (set != null) {
for (String a : set) {
Log.d("thesetis", a);
}
}
这里我想要一个特定的“POSTKEY”的值(每个帖子的Poskey都不同) 我想获取onDataChange方法之外的数组列表或“SET”的值,所以我使用了共享首选项。它适用于String但不适用于Array列表或Set。出现以下问题,
当我第一次打开应用并点击特定帖子时, 返回的共享首选项值的值为NULL。
当我第二次打开同一个帖子时,值是 完美地回归。
当我打开第二篇文章时,值为 上一篇文章正在回归
当我再次打开第一篇文章时,第二篇文章的值正在返回。
我不知道我哪里错了。每次应用程序打开时我都尝试清除共享首选项的值,但会出现同样的问题。我甚至遵循了这个link但没有任何效果。任何帮助都会很棒。提前谢谢。
答案 0 :(得分:1)
如果你不想第一次获得null,你可以做以下两件事之一:
1-以不同方式致电getStringSet
sharedPreferences.getStringSet("notifications", "it isn't saved yet!");
2-在sharedpreference
getStringSet
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putStringSet("notifications", sharedlist);
editor.apply();
如果你想获得当前的帖子而不是之前的帖子,你应该先保存它。我的猜测是你单击第一个帖子并将其存储在sharedpreference
中,当你想要检查第二个时,它会返回第一个。
答案 1 :(得分:0)
我已经在1500ms之后将其存储在sharedpreference中解决了这个问题。
这是我的代码,
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
set = sharedPreferences.getStringSet("notifications", null);
if (set != null) {
for (String a : set) {
Log.d("thesetis", a);
}
}
}
}, 1500);