首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 同一 Activity 靜態 Map 傳值取值為空的排查

     編輯:程式設計疑難解答

現象

使用自訂 HealthMap(內含 ConcurrentHashMap)在同一 Activity 存取值:put 後 get 回傳 null。

程式碼分析

public static Object get(String key) {
    return map.remove(key); // 每次 get 都會移除!
}

根本原因

get(String key) 預設呼叫 remove(key),導致 首次讀取即刪除。若程式碼中連續呼叫兩次 get,第二次自然為 null。

修正建議

  1. 分離讀取與移除:
    public static Object get(String key) {
        return map.get(key); // 僅讀取
    }
    public static Object take(String key) {
        return map.remove(key); // 明確語意:取出並移除
    }
  2. 檢查呼叫邏輯:確認未在同一流程中重複 get 同一鍵值。
  3. 除錯技巧:在 put 後立即 System.out.println(map.size()) 驗證資料確實存入。

最佳實踐

  • 避免在同一 Activity 使用靜態 Map 傳值,優先用 成員變數 或 ViewModel 持有資料。
  • 若必須跨元件共享,使用 LiveData、SharedPreferences 或 DataStore。
  • 靜態容器易造成記憶體洩漏,務必在 onDestroy 清理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved