根据另一个值的查询更改单个Firebase值

时间:2017-03-28 18:13:36

标签: android firebase firebase-realtime-database

我的Firebase数据库看起来像这样

enter image description here

我希望通过查询数据并比较event_user_image的值来更改event_username值。 我的代码看起来像这样

final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dr = database.getReference().child("ApprovedEvents");
        dr.orderByChild("event_user_name").equalTo("username");
        dr.child("event_user_image").setValue("https://lh4.googleusercontent.com/aaaaaaaaaaaaaaaa/photo.jpg");

相反,它在Approved Events下创建一个单独的值。 请帮忙!

1 个答案:

答案 0 :(得分:1)

您的DatabaseReference指的是 ApprovedEvents ,当您为 event_user_image 设置值时,它会像这样:

ApprovedEvents
---Record 1
---Record 2
.
.
.
---event_user_image

您要做的是更改特定记录的 event_user_image

要做到这一点,首先必须使用特定用户名查询记录,如下所示:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference dr = database.getReference().child("ApprovedEvents");
Query query = dr.orderByChild("username").equalTo("yourUsername");

然后你可以使用一个监听器来查看是否会有使用该特定用户名查询的对象,然后获取他们的密钥,以便您可以将其添加到更新路径中:

query.addChildEventListener(
        new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                //dr would refer to path                  : ApprovedEvents
                //adding the key as a child would make it : ApprovedEvents/Record1
                dr.child(dataSnapshot.getKey()).child("event_user_image").setValue("yourDesiredValue");
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }
        });