String userID = selectedCharacter.getUserID();
String charID = selectedCharacter.getCharID();
Character editedCharacter = new Character(userID, charID, name, hitPoints, armorClass, level, experience, gold);
databaseRef
.orderByChild("charID")
.equalTo(selectedCharacter.getCharID())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Translate the character to a map of its data
Map<String,Object> updates = editedCharacter.toMap();
// Update ONLY the node with charID = editedCharacter.getCharID()
databaseRef.updateChildren(updates);
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
所以我正在尝试更新我的firebase数据库中的角色统计数据。如你所见:
我正在使用的代码实际上是将更新放在字符的根目录中。我在这做错了什么?我不确定如何使用密钥找到节点,因为我没有将密钥存储在任何地方。
答案 0 :(得分:0)
而不是databaseRef.updateChildren(updates);
你能试试吗
databaseRef.child(dataSnapshot.getKey()).setValue(updates)
然后看看它是否有效。
答案 1 :(得分:0)
对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
因此,您的代码需要处理快照是列表的事实。对于Android而言,这意味着您循环遍历snapshot.getChildren()
:
databaseRef
.orderByChild("charID")
.equalTo(selectedCharacter.getCharID())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child: dataSnapshot.getChildren()) {
// Translate the character to a map of its data
Map<String,Object> updates = editedCharacter.toMap();
// Update ONLY the node with charID = editedCharacter.getCharID()
child.getRef().updateChildren(updates);
}
}