更新Push firebase android中的值

时间:2017-07-24 03:58:26

标签: android firebase firebase-realtime-database

这是我的firebase数据结构。 enter image description here

现在基本上我想要做的是,首先是 Id:“cbn”。我已经使用 push()。setValue(gpsData)推送了位置。现在基于此 id =“cbn”,我想在<中添加新的纬度和经度strong>位置孩子完全如上图所示,使用“push()。直到现在我的代码是:

  mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

    if (busExists) {
                    // busId = "cbn"
                    mDatabase.child(busId).child("Location").push().setValue(gpsData);


                }

我知道我不能将 busId 作为孩子参考,但如何访问该特定节点并将新数据推送到该节点。

任何帮助?

对于新问题:

   public class Users {
    private String bus_id;
    private HashMap<String, String> coord = new HashMap<>();

    public Users() {

    }

    public String getBus_id() {
        return bus_id;
    }

    public void setBus_id(String bus_id) {
        this.bus_id = bus_id;
    }

    public HashMap<String, String> getCoord() {
        return coord;
    }

    public void setCoord(HashMap<String, String> coord) {
        this.coord = coord;
    }
}

我是这样实现的:

 mDatabase = FirebaseDatabase.getInstance().getReference();

 mDatabase.addValueEventListener(new ValueEventListener() {
     @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    Users bus = new Users();
                    bus.setBus_id(ds.getValue(Users.class).getBus_id());

                    Log.e("bus id: ", bus.getBus_id()+""); // I got NULL

                    busList.add(bus.getBus_id());

                    arrayAdapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

1 个答案:

答案 0 :(得分:1)

您需要触发查询以获取推送ID cbn,然后从中添加位置:

Query query = ref.child("Users").orderByChild("Id").equalTo("cbn");
query.addListenerForSingleValueEvent(new ValueEventListener() {
  public void onDataChange(DataSnapshot snapshot) {
    for (DataSnapshot user: snapshot.getChildren()) {
      user.getRef().child("Location").push().setValue(...);

需要onDataChange()中的循环,因为可能有多个子节点与查询匹配。如果只有一个具有特定Id的孩子,请考虑将用户存储在该ID下。

Users
  cbd
    Locations:...

使用此结构,您可以在不首先查询的情况下添加新位置:

ref.child("Users/cbn/Location").push().setValue(...);