我正在使用 Firebase 向我的应用发送通知,当我收到通知时,我会将消息存储在我的共享首选项中,然后在活动中显示该消息。但是,截至目前,我仅在共享首选项中保存最新的通知消息。如何将通知中的所有消息保存在共享首选项中?
我希望您从Firebase收到的消息有一些唯一的ID。现在,当您在共享首选项中保存消息时,请使用有效负载中的唯一 ID 作为键。在您的情况下,MESSAGE_KEY是相同的,这就是为什么它被最新的覆盖。只需在 saveKeyMessage 函数中使MESSAGE_KEY唯一,就会为您收到的每个通知创建新的共享首选项实例。
或者
您可以使用以下代码将键设置为共享首选项生成的唯一键。
public boolean saveKeyMessage(String message){
SharedPreferences sharedPreferences =
mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Log.d("MainActivity", "Current Timestamp: " + format);
editor.putString(unique_message_id, message);
editor.apply();
return true;
}
您可以使用以下代码显示所有共享首选项实例
SharedPreferences prefs =
mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
Map<String, ?> allPrefs = prefs.getAll(); //your sharedPreference
Set<String> set = allPrefs.keySet();
for(String s : set){
LOG.d(TAG, s + "<" + allPrefs.get(s).getClass().getSimpleName() +"> = "
+ allPrefs.get(s).toString());
希望这能解决你的问题!干杯!
使用 HashSet
将messages
存储到 SharedPreferences
中。
#.将messages
存储到SharedPreferences
:
public static final String KEY_MESSAGES = "messages";
............
.................
public boolean saveKeyMessage(String message) {
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
// Get existing messages
Set<String> messages = getMessages();
// Add new message to existing messages
messages.add(message);
// Store messages to SharedPreferences
editor.putStringSet(KEY_MESSAGES, messages);
editor.apply();
return true;
}
#.从SharedPreferences
获取messages
:
public Set<String> getMessages() {
SharedPreferences sharedPreferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
// Get messages
Set<String> messages = sharedPreferences.getStringSet(KEY_MESSAGES, new HashSet<String>());
return messages;
}
#.获取SharedPreferences
的最后message
:
public String getLastKeyMessage() {
ArrayList<String> messageList = new ArrayList<String>(getMessages());
return messageList.get(messageList.size() - 1);
}
希望这会有所帮助~