【问题标题】:android: adding a new nodeandroid:添加一个新节点
【发布时间】:2018-08-18 13:53:42
【问题描述】:

需要在父节点下添加一个新节点“已完成”,该节点最终将包含骑行结束时节点“请求”的所有信息。

所以基本上,我需要先创建节点“已完成”,但它不添加它。

数据库

{
  "Requests" : {
    "iowpxU6WKUWpzWJyfssSoOVCPFj2" : {
      ".priority" : "f8118c3k3v",
      "destination" : "221 Prince William St",
      "details" : {
        "driver" : "nYIAHSYimJMHbMkXqDt9PQ0U3Nf2",
        "location" : "27 Horsfield St",
        "request status" : "accepted",
        "ridePrice" : 3.75,
        "rideStatus1" : "arrived at pickup",
        "rideStatus2" : "rider in vehicle",
        "rideStatus3" : "destination bound",
        "rideStatus4" : "arrived at destination",
        "rider" : "iowpxU6WKUWpzWJyfssSoOVCPFj2",
        "riderPaid" : "true"
      },
  "Users" : {
    "Drivers" : {
      "nYIAHSYimJMHbMkXqDt9PQ0U3Nf2" : {
        "driver" : "nYIAHSYimJMHbMkXqDt9PQ0U3Nf2",
        "email" : "driver@me.com",
        "name" : "driver",
        "password" : "whatever",
        "phone" : "5551212",
        "rates" : "0"
      }
    },
    "Riders" : {
      "iowpxU6WKUWpzWJyfssSoOVCPFj2" : {
        "avatarUrl" : "",
        "email" : "rider@me.com",
        "name" : "rider",
        "password" : "whatever",
        "phone" : "5551313",
        "rates" : "0",
        "riderId" : "iowpxU6WKUWpzWJyfssSoOVCPFj2"
      }
    }
  }
}

addNewNode

private void addNewNode() { // TODO: ........ NOT ADDING NEW NODE :-| ..........

    Toast.makeText(this, "addNewNode", Toast.LENGTH_LONG).show();

    DatabaseReference newNode = FirebaseDatabase.getInstance().getReference("Completed");
    newNode.child(riderId).push().addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Toast.makeText(DriverTripDetail.this, "addNewNode: onDataChange", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

任何有关我如何解决此问题的帮助将不胜感激。

【问题讨论】:

  • 我已经尝试了所有这些引用,但仍然没有添加节点“已完成”。 “已完成”将包含请求中的所有项目,所以我需要使用 setValue 吗?我尝试这样做: DatabaseReference newNode = FirebaseDatabase.getInstance().getReference("Completed").child(riderId); newNode.push().setValue(1);但这只是增加了:已完成:1 到 db ......对不起,我是一个菜鸟,我自己学习和堆栈溢出:)
  • Firebase 数据库将值存储在路径中。如果没有值,则路径不存在。您的代码创建了对/Completed/$pushID 的引用。但未设置任何值,因此不会创建路径。像这样的东西会起作用:ewNode.child(riderId).push().setValue(true),因为它设置了一个值。
  • @FrankvanPuffelen 成功了,感谢您的帮助...迎接下一个挑战。
  • 很高兴听到丽兹。我把它写在一个答案中。

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 数据库将值存储在路径中。如果没有值,则路径不存在。

您的代码创建了对/Completed/$pushID 的引用。但未设置任何值,因此不会创建路径。像这样的东西会起作用,因为它设置了一个值:

newNode.child(riderId).push().setValue(true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 2022-01-22
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多