爲了後代的緣故 - 我真的很喜歡HashMap的便利性,但HashMap存在併發問題(設置整個hashmap覆蓋可能同時設置的任何其他值)。
我誤已設置整個HashMap的時候我就去updateChildren()
所以我寫了一個簡單的包裝處理添加/在HashMap中刪除的條目:
protected void updateFirebase(String FIELD, HashMap<String, Boolean> hashMap, String hashKey) {
boolean found = false;
for (Object k : hashMap.keySet()) {
if (TextUtils.equals((String) k, hashKey)) {
found = true;
}
}
if (found) { // item being added
HashMap<String, Object> addItem = new HashMap<>();
addItem.put(hashKey, hashMap.get(hashKey));
new Firebase(getObjectUrl()).child(this.key).child(FIELD).updateChildren(
addItem
);
} else { // item being removed
new Firebase(getObjectUrl()).child(this.key).child(FIELD).child(hashKey).removeValue();
}
}
因此,這反而會更新條目而不是嘗試更新整個子樹 - 這消除了使用壞舊HashMap狀態同時更新的問題。
而不是描述您的代碼,創建一個代碼重現問題的最小片段。我們這裏的大多數人閱讀代碼比文字更容易。請參閱http://stackoverflow.com/help/mcve –