1

我使用Firebase向我的應用發送通知,當我收到通知時,我將消息存儲在我的共享偏好設置中,然後在活動中顯示消息。不過,截至目前,我只是在共享偏好設置中保存最新的通知消息。如何將通知中的所有消息保存在共享首選項中?顯示來自多個通知的消息-Android

回答

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()); 

希望這能解決您的問題!乾杯!

+0

謝謝您的回答!這幫助了我很多,我已經確定了這個問題,他們都有相同的ID。但是,如何在getkeymessage()函數中調用該特定的ID? – dfabiano

+0

您可以從有效內容中創建一個新的JSON對象...從中取出字符串並將其傳遞給該函數。使用相同的ID來檢索共享偏好。如果這解決了問題,請將答案標記爲已接受,因爲這對將來面臨此問題的任何人都有幫助。 –

+0

我剛剛做了,非常有幫助。你介意添加這個過程如何尋找getkeymessage()函數? – dfabiano

0

使用HashSetmessages存儲爲SharedPreferences

#。商店messagesSharedPreferences

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; 
} 

#。獲得最後messageSharedPreferences

public String getLastKeyMessage() { 

    ArrayList<String> messageList = new ArrayList<String>(getMessages()); 
    return messageList.get(messageList.size() - 1); 
} 

希望這將有助於〜

+0

感謝您的回覆,如果我沒有使用不支持putStringSet()的版本, – dfabiano

相關問題