Я использую приведенный ниже код, но каждый раз получаю разные значения ключа случайным образом
вместо -LVmsTmBZ_kCdcXlZh7e
.
Это происходит потому, что каждый раз, когда вы используете метод push()
, генерируется новый идентификатор.
Так что, если вы хотите получить доступ к определенным объектам, вы должны знать что-то, что уникально идентифицирует эти объекты. В этом случае, если вы хотите изменить значение вашего свойства sellername
, вы должны использовать запрос, который выглядит следующим образом:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference classicalMechanicsRef = rootRef.child("books").child("Classical Mechanics");
Query query = classicalMechanicsRef.orderByChild("sellername").equalTo("sagar");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
ds.child("sellername").getRef().setValue("newvalue");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
query.addListenerForSingleValueEvent(valueEventListener);
Используя этот код, вы измените имя продавца во всех объектах, что имеет смысл, поскольку новое имя должно существовать во всех объектах.
Редактировать: Еще проще обновлять / удалять данные в рамках одного объекта. Для этого, пожалуйста, используйте следующие строки кода:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference classicalMechanicsRef = rootRef.child("books").child("Classical Mechanics").child("-LVmsTmBZ_kCdcXlZh7e");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
dataSnapshot.child("sellername").getRef().setValue("newvalue");
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
classicalMechanicsRef.addListenerForSingleValueEvent(valueEventListener);