[英]Fetch the JSON array from firebase realtime database. Android
使用此代碼(地圖示例)
Map<String, Place> placeMap;
DatabaseReference places;
ArrayList<Place> placeData;
在onCreate中
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) {
}
});
}
首先, 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
map以及對應的getters,如果要獲取所有用戶對象,請使用以下代碼:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.