android:添加新节点

时间:2018-08-18 05:09:42

标签: android firebase firebase-realtime-database

需要在父级下添加一个新节点“ Completed”,该节点最终将包含旅程结束时来自节点“ Requests”的所有信息。

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

数据库

{
  "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) {

        }
    });
}

在解决该问题方面的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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

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