首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新现有值,而不是setValue创建新记录

更新现有值,而不是setValue创建新记录
EN

Stack Overflow用户
提问于 2018-03-04 22:46:05
回答 1查看 8.2K关注 0票数 3

我有一个按钮,在我的Android应用程序,当按下应该更新得分在Firebase数据库;

代码语言:javascript
复制
            // 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控制台手动打开了数据库,而不是以编程方式更新记录,所以我使用了我在DB中创建的作为PK的gameID。我已经将要更新的值硬编码为5,以使其首先工作。

Firebase中的数据结构为;

代码语言:javascript
复制
-Matches
 - Match_01
  -matchID
  -homeScore
  -etc....

所有的帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-04 22:57:09

要更新,您需要这样做:

代码语言:javascript
复制
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);

更多信息在这里:

fields

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49101324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档