【问题标题】:Updating data in firebase realtime database更新 Firebase 实时数据库中的数据
【发布时间】:2022-07-08 12:55:12
【问题描述】:

我想更新上面的记录,但是当我更新它时它会更新父(用户)而不是子。

  `     button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendNotification();
            Toast.makeText(MainActivity2.this, str, Toast.LENGTH_SHORT).show();
            HashMap<String, Object> m = new HashMap<String, Object>();
            Intent intent = getIntent();
            String ID=intent.getStringExtra("counter");
            String email = intent.getStringExtra("email");
            m.put("ID",ID);
            m.put("Email", email);
            if(s!="Query" && s!="Resource")
            m.put("Complain", t.getText().toString());
            else if(s!="Complain" && s!="Resource")
            m.put("Query", t.getText().toString());
            else
            m.put("Resources",t.getText().toString());
            m.put("Time", "");
            m.put("Feedback", "Pending");
            FirebaseDatabase.getInstance().getReference().child("User").updateChildren(m).addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void unused) {
                    Toast.makeText(MainActivity2.this, "Your data is successfully updated", Toast.LENGTH_SHORT).show();
                }
            });

        }
    });`

数据库结构:

【问题讨论】:

    标签: java android firebase google-cloud-platform firebase-realtime-database


    【解决方案1】:

    我想更新上面的记录,但是当我更新它时,它会更新父(用户)节点而不是子节点。

    这是您在以下参考中调用 updateChildren() 后的预期行为:

    FirebaseDatabase.getInstance().getReference().child("User");
    

    正好指向User 节点。如果要更新孩子,则必须将密钥添加到引用中:

    DatabaseReference db = FirebaseDatabase.getInstance().getReference();
    DatabaseReference childRef = db.child("User").child("-N2gd...8-6b"); ?
    childRef.updateChildren(m).addOnSuccessListener(/* ... /*);
    

    所以解决这个问题的关键是在你的引用中添加节点的key。如果您还没有存储密钥,请查看以下帖子的答案:

    【讨论】:

    • DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference keyRef = rootRef.push(); String key = keyRef.getKey(); Toast.makeText(MainActivity2.this, "key : "+key, Toast.LENGTH_SHORT).show(); DatabaseReference db = FirebaseDatabase.getInstance().getReference(); DatabaseReference childRef = db.child("User").child(key); childRef.updateChildren(m); 我写了这段代码,但面临同样的问题
    • 您应该创建一个新密钥,而应使用现有的 ("-N2gd...8-6b")。最后一个链接中提供的示例仅在您添加新数据时才有效。在引用中添加该 ID 并告诉我它是否有效。
    • 是的,如果我们手动输入密钥,我可以工作。但是如果我们想在运行时更新任何特定的键怎么办?这怎么可能。请告诉我这个
    • 只需要知道ID再看孩子。这就是我向你展示这个例子的原因,对吧?
    • 嘿法蒂玛。我可以帮助您了解其他信息吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多