Как получить доступ к полям массива в FirebaseFirestore с Android Studio / Kotlin? - PullRequest
2 голосов
/ 24 мая 2019

У меня есть массив объектов в моей базе данных Cloud Firestore, который называется Experience. Каждый опыт имеет username, date и т. Д., И в списке опыта может быть несколько опытов. Как я могу получить доступ к определенным полям моего массива опыта? Я знаю, что, скажем, Дарт, я могу напечатать что-то вроде:

querySnapshot.documents[i].data["Experience"][number of array item]["username"] 

Но как я могу сделать то же самое в Котлине?

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Когда вы добавляете массив пользовательских объектов (Experience) в базу данных Cloud Firestore, он будет добавлен в базу данных в виде списка.Если ваша база данных выглядит следующим образом:

Firestore-root
   |
   --- myCollection (collection)
          |
          --- myDocument (document)
                |
                --- experiences (array)
                       |
                       --- 0 (Experience object)
                       |   |
                       |   --- username: "UserName"
                       |   |
                       |   --- date: May 25, 2019 at 12:12:12 PM UTC+3
                       |
                       --- 1 (Experience object)
                           |
                           --- username: "AnotherUserName"
                           |
                           --- date: May 24, 2019 at 13:13:13 PM UTC+3

Обратите внимание, что в настоящее время невозможно получить список пользовательских объектов (опыта), просто получая данные из свойства experiences.При использовании:

List<Object> list = (List<Object>) document.get("experiences");
Object item = list.get(yourIndex);

Объект item на самом деле является HashMap, а не Experience объектом.Я написал приведенные выше строки кода на Java, чтобы вы могли видеть тип возвращаемого значения более четко.Поэтому строка, подобная следующей:

val experience: Experience = (list[yourIndex] as Experience).username

не будет работать.Если вы попытаетесь привести этот HashMap к Experience объекту, вы получите ошибку, которая выглядит следующим образом:

java.lang.ClassCastException: java.util.HashMap не может быть приведенв com.example.Experience

Итак, чтобы решить эту проблему, вам придется написать собственный код, который поможет вам преобразовать объект HashMap в объект Experience.Более того, если вам нужен List<Experience>, вам также необходимо преобразовать List<HashMap> объекты в List<Experience> объекты.

0 голосов
/ 25 мая 2019

Поля типа списка поступают как объекты типа списка в Java / Kotlin.Вы работаете с ним так же, как и с любым другим списком на выбранном вами языке.

List<Object> list = List<Object> snapshot.get("list-type-field");
Object item = list.get(index_of_your_choice);
// then check its type and cast it

Вы должны ознакомиться с DocumentSnapshot и общей документацией для запросов к Firestore .

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