反序列化包含数组的Firestore文档的推荐方法是什么?

时间:2017-11-10 21:14:10

标签: android firebase kotlin google-cloud-firestore

我正在尝试获取包含数组的Firestore文档,但是,一旦添加数组,我就无法使DocumentSnapshot.toObject方法正常工作。我不想使用集合,因为数组最多只能包含1-2个项目。

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文档包含一个名为references的数组,其中一个DocumentReference。如果我从模型类中删除引用字段,则对象反序列化就好了。

2 个答案:

答案 0 :(得分:1)

将firebase-firestore的gradle文件条目从11.4.2更新到11.6.0修复了反序列化问题。

答案 1 :(得分:0)

如果我想要检索单个文档中的项目列表,我可以这样做: -

包含字符串列表的数据类,列表可以是任何类型

注意: - 我为所有参数提供默认值,为了反序列化,必须让班级有空承包商。

 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数据库中的数据: -

enter image description here

当我运行上面的代码时,

我的logcat中的输出

enter image description here