Есть ли способ получить значения объектов из Firestore? - PullRequest
0 голосов
/ 16 июня 2019

Это структура моих данных: Imgur

Я пытаюсь получить значения аллергии ID1 и аллергии Id2. Есть ли способ получить значения «аллерген» и «описание» отдельно? Я хотел бы присвоить эти значения другому классу, который называется Allergy, и добавить их в ArrayList. Например:

Allergy allergy = new Allergy();
ArrayList<Allergy> allergies = new ArrayList<>();

// Data of "allergyId1"
allergy.setAllergen(the value of allergen);
allergy.setDescription(the value of description);

allergies.add(allergy);

Я пытался преобразовать объект, возвращаемый в объект Json, но я думаю, что должен быть более эффективный способ получения данных из Firestore.

private void retrieveAllergiesData() {
        FirebaseUser user = mAuth.getCurrentUser();
        DocumentReference ref = db.collection(user.getUid()).document("allergies");

        ref.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        Map<String, Object> tmp = new HashMap<>();
                        tmp = document.getData();

                        for (Map.Entry<String, Object> entry : tmp.entrySet()) {
                            Log.d("allergy", entry.getKey() + ":" + entry.getValue().toString());
                        }

                    } else {
                        Log.d("fb", "No such document");
                    }
                } else {
                    Log.d("fb", "get failed with ", task.getException());
                }
            }
        });

    }

Это то, что я получаю Imgur

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Создать класс Allergy с конструктором и get set

private class Allergy  {

        private String allergen;
        private String description;

        public Allergies() {

        }

        public Allergies(String allergen, String description) {
            this.allergen = allergen;
            this.description = description;
        }

        public String getAllergen() {
            return allergen;
        }

        public void setAllergen(String allergen) {
            this.allergen = allergen;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }
    }

Затем заменить Object на Allergy.Это, вероятно, должно работать в вашем случае.

private void retrieveAllergiesData() {
        FirebaseUser user = mAuth.getCurrentUser();
        DocumentReference ref = db.collection(user.getUid()).document("allergies");

        ref.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful()) {
                    DocumentSnapshot document = task.getResult();
                    if (document.exists()) {
                        Map<String, Allergy> tmp = new HashMap<>();
                        tmp = document.getData();

                        for (Map.Entry<String, Allergy> entry : tmp.entrySet()) {
                            String allergen = entry.getValue().getAllergen();
                            String description = entry.getValue().getDescription();
                        }

                    } else {
                        Log.d("fb", "No such document");
                    }
                } else {
                    Log.d("fb", "get failed with ", task.getException());
                }
            }
        });

    }
0 голосов
/ 16 июня 2019

Вот как это работает. Он не становится более эффективным с точки зрения производительности, чем работа с картой, которая возвращается для документа.

Хотя вы без необходимости создаете новую Карту, не используя ее:

Map<String, Object> tmp = new HashMap<>();
tmp = document.getData();

Это можно упростить так:

Map<String, Object> tmp = document.getData();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...