Android Firebase更新现有值而不是setValue创建新记录[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我的Android应用程序上有一个按钮,按下时应更新Firebase数据库中的分数;

            // UPDATE DATABASE START
            final String getArgument = getArguments().getString("matchid");
            DatabaseReference database = FirebaseDatabase.getInstance().getReference();
            final DatabaseReference ref = database.child("Matches");
            final Query gameQuery = ref.orderByChild("gameID").equalTo(getArgument);

            gameQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot snapshot) {
                    if(snapshot.exists()){
                        for (DataSnapshot child: snapshot.getChildren()) {
                            ref.child(getArgument).child("homeScore").setValue(5);
                        }
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
            //UPDATE DATABASE END

当我执行代码时,我在数据库中获得一条新记录,而不是更新现有的字段数据。我通过Firebase控制台手动操作数据库,而不是以编程方式更新记录,所以我使用我在数据库中创建的作为PK的gameID。我已经将要更新的值硬编码为5以使其首先运行。

Firebase中的数据结构是;

-Matches
 - Match_01
  -matchID
  -homeScore
  -etc....

所有帮助赞赏。

android firebase firebase-realtime-database
1个回答
2
投票

要进行更新,您需要执行以下操作:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Matches").child("Match_01");
Map<String, Object> updates = new HashMap<String,Object>();

updates.put("matchID", newID);
updates.put("homeScore", newscore);
//etc

ref.updateChildren(updates);

更多信息:

https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields

要同时写入节点的特定子节点而不覆盖其他子节点,请使用updateChildren()方法。

© www.soinside.com 2019 - 2024. All rights reserved.