I'm using below code but I"m getting different key value each time randomly
instead of -LVmsTmBZ_kCdcXlZh7e
.
This is happening because everytime you are using the push()
method a brand new id is generated.
So if you want to access specific objects, you must know something that unique identifies those objects. In this case, if want you to change the value of your sellername
property, you should use a query that looks like this:
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);
Using this code, you'll change the name of the seller within all objects, which makes sense since the new name must exist within all objects.
Edit: It's even simpler to update/delete the data under a single object. For that please use the following lines of code:
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);