我正在使用Firebase向我的应用发送通知,当我收到通知时,我将消息存储在我的共享首选项中,然后在活动中显示消息。但是,截至目前,我只在共享首选项中保存最新的通知消息。如何在共享首选项中保存通知中的所有消息?
答案 0 :(得分:1)
我希望你从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());
希望这能解决你的问题!干杯!
答案 1 :(得分:0)
使用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;
}
#。从messages
获取SharedPreferences
:
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;
}
#。从message
获取最后SharedPreferences
:
public String getLastKeyMessage() {
ArrayList<String> messageList = new ArrayList<String>(getMessages());
return messageList.get(messageList.size() - 1);
}
希望这会有所帮助〜