Push firebase android中的更新值

Posted

技术标签:

【中文标题】Push firebase android中的更新值【英文标题】:Update Values within Push firebase android 【发布时间】:2017-07-24 03:58:25 【问题描述】:

这是我的 Firebase 数据结构。

现在我基本上想做的是,首先是 Id:"cbn"。我已经用 push().setValue(gpsData) 推送了位置。 现在基于这个 id = "cbn",我想在 id = "cbn" 中添加新的纬度和经度strong>Location child 使用"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】:

您需要触发查询以获取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 的孩子,请考虑将用户存储在该 Id 下。

Users
  cbd
    Locations:...

使用此结构,您无需先查询即可添加新位置:

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

【讨论】:

谢谢。有效。但同样,我还有另一个小问题。我已经为您编辑了代码(也是图表)。现在我想要的是读取所有这些单个节点的所有数据(ID,位置),即每个 id 'cbn' , 'uoohj' 等等。为此,我创建了一个用户类,它记录了存储纬度和经度的“id”和“坐标”哈希图。我还提到了我在上面的代码中遵循的方法。但它没有奏效。您能否就如何做到这一点提供一些见解?谢谢。

以上是关于Push firebase android中的更新值的主要内容,如果未能解决你的问题,请参考以下文章

更新 Firebase 中键的值

Android:为啥firebase Push键不改变

是否可以从 Firebase 同步加载数据?

从Firebase实时数据库读取Android数据并在RecyclerView上显示

如何使用 Firebase 实时数据库在不知道 Android 索引的情况下更新 ArrayList 中的元素?

如何在不更改实时数据库中的 downloadUrl 的情况下更新 android 中 Firebase 存储中的位图图像