2 回答
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);
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) {
}
});
}
添加回答
举报