Я пытаюсь получить документ Firestore, содержащий массив, однако я не могу заставить метод DocumentSnapshot.toObject
работать правильно, как только я добавлю массив. Я не хочу использовать коллекцию, поскольку массив, вероятно, будет содержать только 1-2 элемента max.
java.lang.RuntimeException: Could not deserialize object. Failed to convert value of type com.google.android.gms.internal.zzegf to DocumentReference (found in field 'references.[0]')
Ниже мой модельный класс
data class SomeModel( var references : ArrayList<DocumentReference> = ArrayList(0), var title : String? = null, var acronym : String? = null, var number : Long? = null ){ }
Мой документ Firestore содержит массив с именами с одним DocumentReference
. Если я удаляю ссылочное поле из класса модели, объект десериализуется просто отлично.
если я хочу получить список элементов внутри одного документа, я мог бы сделать: –
класс данных, который содержит список строк, список может быть любого типа
note: – я предоставляю значения по умолчанию для всех параметров, для десериализации необходимо, чтобы класс имел пустой подрядчик.
data class SomeModel(val references : List<String> = emptyList() , val title : String = "" , val acronym : String = "" , val number : Long = 0L)
то я могу указать на этот единственный документ и десериализировать его, включая список itmes в документе следующим образом:
val db = FirebaseFirestore.getInstance() val someModelRef = db.collection("someCollection").document("SomeModel") someModelRef.get().addOnSuccessListener { val someModel : SomeModel = it.toObject(SomeModel::class.java) someModel.references.forEach { Log.i("MainActivity","items $it") } }
данные в базе данных firestore: –
вывод в моем logcat, когда я запускаю вышеуказанный код
Обновление моей записи файла градиента firebase-firestore с 11.4.2 по 11.6.0 устраняет проблему десериализации.