Как сделать запрос всех документов коллекции в Fire Store - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь отобразить информацию из Cloud Firestore на картах Google. Я могу применить маркер из документа, используя приведенный ниже код, однако у меня есть несколько документов, которые мне нужны для отображения данных.

Ниже приведен текущий код, и, как я уже сказал, он успешно отображает маркер с информацией из одного документа, однако каждый документ содержит свое местоположение, которое необходимо отобразить на карте.

    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 голосов
/ 30 апреля 2019

Чтобы получить значения ваших latitude и longitude свойств всех документов, просто используйте следующие строки кода:

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.

0 голосов
/ 30 апреля 2019

Если вы хотите, чтобы все данные документа вы можете попробовать это: -

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;
                    }
                }
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...