2017-07-24 40 views
0

这是我的firebase数据结构。 enter image description herePush firebase内更新值android

现在基本上我想要做的是,首先,有ID:“第一财经”。我用push()。setValue(gpsData)推送了位置。 。现在,在此基础上ID =“CBN”,我想在地点孩子添加新的纬度和经度使用“推图中酷似上面显示()到目前为止我的代码是:

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

你需要火查询来获取的cbn推ID,然后从那里添加位置:

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,请考虑将该用户存储在该标识下。

Users 
    cbd 
    Locations:... 

有了这个结构,你可以不先查询添加一个新的位置:

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

谢谢。有效。但是,我又有一个小问题。我为你编辑了代码(也是图)。现在我想要读取所有这些单个节点的所有数据(ID,位置),即为每个ID'cbn','uoohj'等等。为此,我创建了一个Users类,它记录了存储经度和纬度的'id'和'coord'hashmap。我还提到了我在上面的代码中遵循的方法。但它没有奏效。你能否就如何做到这一点提供一些见解?谢谢。 – Sagaryal