如何合并从安卓中的Firebase获取的两个哈希图数据



我有两个节点 用户和植物

Users
  |
  |-plantId
      |
      |-image
          |
          |-imageLink
  |-plantId
      |
      |-image
          |
          |-imageLink
Plants
   |-plantId
      |
      |-collectedPlant
          |
          |-plantCount

用户和植物的plantid将是相同的。我需要获取一个包含植物 id-imagelink 和 plantCount 的HashMap

我分别随身携带两个节点数据。有没有简单的方法来解决它?

要根据编辑的数据库结构并假设 plantCount 属性定义为 Long 来解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference imageRef = rootRef.child("Users").child("plantId").child("image");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String imageLink = ds.child("imageLink").getValue(String.class);
            DatabaseReference collectedPlantRef = rootRef.child("Plants").child("plantId").child("collectedPlant");
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Map<String, Long> map = new HashMap<>();
                    for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
                        Long plantCount = dSnapshot.child("plantCount").getValue(Long.class);
                        map.put(imageLink, plantCount);                     
                    }
                    //Do what you want with this Map.
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            collectedPlantRef.addListenerForSingleValueEvent(eventListener);            
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
imageRef.addListenerForSingleValueEvent(valueEventListener);

如您所见,我使用了嵌套查询来获取您要查找的地图。

最新更新