Android Firebase Firestore: получить данные из глубины в документе Firestore - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть документ базы данных пожарного хранилища, который по сути выглядит так:

{
    "name": "George",
    "weeks": [
        {
            "checked": true,
            "days": [
                {
                    "checked": true,
                    "exercises": [
                        {
                            "exercise": "Bench Press",
                            "sets": [
                                {
                                    "weight": 300,
                                    "reps": 20
                                },
                                {
                                    "weight": 400,
                                    "reps": 30
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}

Я знаю, что могу получить данные для документа, выполнив:

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference userRef = db.collection("users");
Query usersDataQuery = userRef.whereEqualTo("name", "George");

    usersDataQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()){
                for(QueryDocumentSnapshot document: task.getResult()){
                    Log.d("data = ", document.getId() + " => " + document.getData());
                }
            }
        }
    });

, но затем документ.getData () возвращается как:

2 => {weeks=[{days=[{exercises=[{sets=[{weight=300, reps=20}, {weight=400, reps=30}, {weight=500, reps=40}], exercise=Bench Press}, {sets=[{weight=300, reps=20}, {weight=400, reps=30}, {weight=500, reps=40}], exercise=Skull Crushers}, {sets=[{weight=300, reps=20}, {weight=400, reps=30}, {weight=500, reps=40}], exercise=Flyes}, {sets=[{weight=600, reps=20}, {weight=900, reps=30}, {weight=780, reps=40}], exercise=Incline Bench Press}], checked=true}], checked=true}], name=George}

И у меня нет никакого способа получить вес в первом индексе «множеств».Вы могли бы подумать, что можете сделать что-то вроде: document.getData()["weeks"][0]["days"][0]["exercises"][0]["sets"][0]["weight"] Но я не нашел способ сделать это так.Дайте мне знать, если есть хорошее решение для получения таких данных.

1 Ответ

0 голосов
/ 18 декабря 2018

Как видно из документации API, getData () возвращает карту всех полей и их значений в документе.Вам необходимо погрузиться в эти значения.

Также обратите внимание, что каждое значение поля в документе будет отображаться как соответствующий тип Java, который описывает каждое значение.Таким образом, если поле содержит объект, тип значения поля будет Map<String,Object>, ключи и значения которого будут свойствами и значениями этого объекта.Если значение поля содержит массив, вы получите List<Object>, содержащее каждое значение массива.

Поскольку у вас много вложенных списков и объектов, вы в конечном итоге будете писать много кодакоторый распаковывает каждый из этих списков и карт, чтобы обнаружить ваши данные.Вы могли бы в конечном итоге сделать много журналов отладки, чтобы научиться делать это эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...