为了账号安全,请及时绑定邮箱和手机立即绑定

从 firebase 实时数据库中获取 JSON 数组。安卓

从 firebase 实时数据库中获取 JSON 数组。安卓

慕后森 2021-06-08 09:23:37
我想从我的 Firebase 实时数据库中获取整个 JSON 数组。从实时数据库中获取数组并将其存储在ArrayList自定义类中。
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

首先,location节点不是一个array在术语中包含其他位置对象的对象。其次,正如我在您的屏幕截图中看到的,您的数据库结构不是很好。您的collion节点应该保存相同类型的对象。在您的情况下,它包含用户对象和location对象。如我所见,在您的位置对象中,您实际上是用户的坐标,为此我建议您将数据库结构更改为:


Firebase-root

    |

    --- collion

          |

          --- userId

                |

                --- email: "jawadkhant557@gmail.com"

                |

                --- id: "CQuL...ihq1"

                |

                --- name: "jawadkhan"

                |

                --- location

                      |

                      --- latitude: 31.54614619

                      |

                      --- longitude: 74.40240774

在这种情况下,当您想要获取用户的经纬度时,只需使用以下代码行即可:


String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference uidRef = rootRef.child("collion").child(uid).child("location");

uidRef.addListenerForSingleValueEvent(/* ... */);

假设你有你的用户,命名为模型类Collion有三个字段email,id,name和location地图加上相应的干将,如果你想获得所有用户对象,请使用以下代码:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference collionRef = rootRef.child("collion");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot ds : dataSnapshot.getChildren()) {

            Collion collion = ds.getValue(Collion.class);

            Log.d("TAG", collion.getName());

        }

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {}

};

collionRef.addListenerForSingleValueEvent(valueEventListener);


查看完整回答
反对 回复 2021-06-10
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

使用此代码(带有地图的示例)


    Map<String, Place> placeMap;

    DatabaseReference places;

    ArrayList<Place> placeData;

在创建中


     database = FirebaseDatabase.getInstance();

     places = database.getReference("Place");

     placeMap = new HashMap<>();

创建方法(在firebase中获取数据)


    private void getAllMarkerPlace() {


            places.addValueEventListener(new ValueEventListener() {

                @Override

                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {


                    for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {


                        placeData = new ArrayList<>();

                        place = postSnapshot.getValue(Place.class);

                        placeMarker = new LatLng(Double.valueOf(place.getLat()), Double.valueOf(place.getLng()));

                        place.setLatLng(placeMarker);

                        placeData.add(place);

                        placeMap.put(place.getName(), place);



                        mMap.setOnInfoWindowClickListener(MapsActivity.this);

                        mMap.addMarker(new MarkerOptions()

                                .position(placeMarker)

                                .title(place.getName()));

                        mMap.setInfoWindowAdapter(MapsActivity.this);



                    }



                }


                @Override

                public void onCancelled(@NonNull DatabaseError databaseError) {


                }



            });


        }


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信