[enter image description here][1]
答案 0 :(得分:1)
为了更新节点,您必须知道该节点的完整路径。
Firebase不支持更新查询的概念,您可以在其中将条件传递给更新语句。因此,如果您不知道完整的路径,则必须采取两步方法:
假设例如Name
属性标识了您要更新的节点,则可以使用以下方法做到这一点:
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Cameras");
Query query = ref.orderByChild("Name").equalTo("TheNameOfTheNodeYouWantToUpdate");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot cameraSnapshot: dataSnapshot.getChildren()) {
cameraSnapshot.getReference().child("Favorite").set(1);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
}
鉴于您要更新上面的计数器,实际上您可能想在onDataChange
内use a transaction:
DatabaseReference favRef = cameraSnapshot.getReference().child("Favorite");
favRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Integer currentValue = mutableData.getValue(Integer.class);
if (currentValue == null) {
mutableData.setValue(1);
} else {
mutableData.setValue(currentValue + 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "transaction:onComplete:" + databaseError);
}
});