如何仅在Android上更新Firebase数据库上的特定字段

时间:2017-11-18 13:23:08

标签: java android firebase firebase-realtime-database

我试图在用户点击按钮时只更新一个字段

这是database

image

我需要在用户点击按钮时更新report_status

    b1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        report_value=Integer.parseInt(arrayforreport.get(posi));
            report_value++;
         databaseReference.addValueEventListener(new ValueEventListener() {
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
                 //i need to update report_status by id
             }

             @Override
             public void onCancelled(DatabaseError databaseError) {

             }
         });

        }
    });

2 个答案:

答案 0 :(得分:2)

为了更新Firebase数据库中的值,无需附加侦听器,只有在需要读取数据时才需要该侦听器。因此,要更新特定节点,您只需要在setValue()对象上直接使用databaseReference方法。

因此,假设type节点是Firebase数据库的直接子节点,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("type")
    .child("Whatsapp")
    .child("Shopping Deals")
    .child(shoppingDealId)
    .child("report_status")
    .setValue("newValue");

其中shoppingDealId是特定购物交易的ID。您可以使用以下代码行获取此ID:

String key = ref.push().getKey();

答案 1 :(得分:1)

addValueEventListener是检索值,您不需要它来设置值。

首先从DatabaseReference获取密钥,然后使用setValue更改值。

b1.setOnClickListener(new View.OnClickListener() {
  @Override
        public void onClick(View v) {
            report_value=Integer.parseInt(arrayforreport.get(posi));
            report_value++;

            DatabaseReference databaseReference = adapter.getRef(position);
            String key = databaseReference.getKey();

           databaseReference.child("type").child("Whatsapp").child("Shopping Deals").child(key).child("report_status").setValue(report_status);

        }
    });