Android - Firestore toObject () не может десериализовать объект с вложенным массивом строк - PullRequest
1 голос
/ 02 октября 2019

Это моя Class модель данных в Firestore: Class data model in Firestore

Вот Class в моей модели Kotlin.

data class Class(
    var teacher: String = "",

    val capacity: Int = 0, 

    val location: String = "",

    var roster: List<String> = ArrayList() // this doesn't work and neither does String or HashMap<String, String>
)

Iпопытаться получить данные для класса как таковые с помощью сопрограмм:

val snapshot = database.collection("class").get().await()
val class = snapshot.toObject(Class::class.java)

Однако, он не может отобразить roster в ArrayList и дает мне следующую трассировку стека:

E / FirebaseServiceImpl: getClass: FAILURE java.lang.RuntimeException: Не удалось десериализовать объект. Ожидается список, но есть класс java.lang.String (находится в поле 'roster')

--------- начало сбоя

E / AndroidRuntime: FATALИСКЛЮЧЕНИЕ: main

Процесс: com.packagename.myapp, PID: 8809

java.lang.RuntimeException: Не удалось десериализовать объект. Ожидается список, но есть класс java.lang.String (находится в поле 'roster')

Я также пытался сделать roster String и HashMap, но когда я это делаю, он говоритон обнаруживает ArrayList.

Как я могу получить массив строк, вложенных в объект, если я использую toObject()?

1 Ответ

0 голосов
/ 03 октября 2019

ОК, похоже, в коде не было ничего плохого. Когда я удалил коллекцию и заново загрузил исходные данные своей коллекции в Firebase, это решило мои проблемы, и я ничего не изменил в коде. К сожалению, я не могу сказать, что вызвало это, но если у вас возникла похожая проблема, может быть, вам также поможет повторный импорт ваших данных?

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