我正在使用push
方法在实时Firebase数据库上添加数据。现在,我想从应用程序中检索sellername
并更新新的sellername
,并将更改也保存在Firebase数据库中。
我该怎么做?
我正在使用以下代码,但是每次都随机获得不同的键值
而不是-LVmsTmBZ_kCdcXlZh7e
。
FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference ref = mFirebaseDatabase.getReference().child("books").child("Classical Mechanics");
String key = ref.push().getKey();
Toast.makeText(book_details.this, key, Toast.LENGTH_SHORT).show();
然后我正在使用:
FirebaseDatabase.getInstance().getReference()
.child("books")
.child(Classical Mechanics)
.child(key)
.child("sellername")
.setValue("newvalue");
它给了我空错误,这是预期的结果,因为我得到的是随机键值而不是单个常量。
答案 0 :(得分:1)
我正在使用以下代码,但是每次都随机获得不同的键值 而不是
-LVmsTmBZ_kCdcXlZh7e
。
之所以会这样,是因为每次您使用push()
方法时,都会生成一个全新的ID。
因此,如果要访问特定的对象,则必须知道一些可以唯一标识这些对象的知识。在这种情况下,如果要更改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);