现在基本上我想要做的是,首先是 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) {
}
});
答案 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(...);