如何在Fire Store中查询集合的所有文档

时间:2019-04-30 03:51:59

标签: java android firebase google-maps google-cloud-firestore

我正在尝试在Google地图上显示Cloud Firestore的信息。我可以使用以下代码在文档中应用标记,但是我需要显示多个文档。

下面是当前代码,正如我所说,它成功显示了一个文档中带有信息的标记,但是每个文档都包含一个需要在地图上显示的不同位置。

    private void addMapMarkers(){

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    CollectionReference pointsRef = rootRef.collection("notes");
    DocumentReference docRef = pointsRef.document("u20UmWSrlP0EiZH9CNP3");
    docRef.get().addOnCompleteListener(new 
    OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document.exists()) {
                    String latitude = document.getString("Latitude");
                    String longitude = document.getString("Longitude");
                    String name = document.getString("Attraction Name");

                    float lat = Float.parseFloat(latitude);
                    float lng = Float.parseFloat(longitude);

                    LatLng latLng = new LatLng(lat, lng);
                    mMaps.addMarker(new 
                    MarkerOptions().position(latLng).title(name));
                }
            }
        }
    });
}

数据库结构如下:

2 个答案:

答案 0 :(得分:0)

如果要获取所有文档数据,可以尝试以下操作:-

db.collection("Chat").addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
                for (DocumentChange dc : queryDocumentSnapshots.getDocumentChanges()) {
                    switch (dc.getType()) {
                        case ADDED:
                            //  Log.d("TAG", "New Msg: " + dc.getDocument().toObject(Message.class));

                            break;
                        case MODIFIED:

                            //      Log.d("TAG", "Modified Msg: " + dc.getDocument().toObject(Message.class));
                            break;
                        case REMOVED:
                            //     Log.d("TAG", "Removed Msg: " + dc.getDocument().toObject(Message.class));
                            break;
                    }
                }
            }
        });

答案 1 :(得分:0)

要获取所有文档的latitudelongitude属性的值,只需使用以下代码行:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference notesRef = rootRef.collection("notes");
notesRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                float lat = Float.parseFloat(document.getString("Latitude"));
                float lng = Float.parseFloat(document.getString("Longitude"));
                String name = document.getString("Attraction Name");
                LatLng latLng = new LatLng(lat, lng);
                mMaps.addMarker(new MarkerOptions().position(latLng).title(name));
            }
        }
    }
});

因此解决此问题的关键是使用task.getResult(),它可以帮助您遍历QueryDocumentSnapshot对象。