java - Android Firebase 更新现有值而不是 setValue 创建新记录

标签 java android firebase firebase-realtime-database

<分区>

我的 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 控制台手动启动数据库,而不是以编程方式更新记录,因此我使用我创建的 gameID 作为我在数据库中的 PK。 我已将要更新的值硬编码为 5 以使其首先运行。

Firebase 中的数据结构是;

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

感谢所有帮助。

最佳答案

要更新,您需要这样做:

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

To simultaneously write to specific children of a node without overwriting other child nodes, use the updateChildren() method.

关于java - Android Firebase 更新现有值而不是 setValue 创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101324/

相关文章:

java - 使用 wsdl 文件生成 SOAP 请求消息

java - 致命异常无法启动 Activity ComponentInfo

javascript - 警报在 Cordova 未定义

android - 如何在后台和前台处理 firebase 通知?

node.js - Firestore 函数 listCollections() 仅返回空数组

java - 在 Spark 中使用 Hadoop 作业

java - 将八进制数视为小数

java - JAVA 的 TWAIN/WIA 实现

javascript - kotlin 多平台 : how to use Kotlin Flow in Javascript

android - 无法在 Flutter 中使用 Firebase Auth 进行注册