簡體   English   中英

從Firebase實時數據庫中獲取JSON數組。 安卓系統

[英]Fetch the JSON array from firebase realtime database. Android

我想從Firebase實時數據庫中獲取整個JSON數組。 從實時數據庫中獲取Array並將其存儲在自定義類的ArrayList中。

數據庫圖片在這里

使用此代碼(地圖示例)

    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的模型類具有三個字段emailidnamelocation 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM