Firebase Firestore Android无法反序列化对象

时间:2017-12-02 14:00:08

标签: android firebase kotlin google-cloud-firestore

我想将firebase firestore中的数据反序列化为模型(Foo)

data class Foo(
        var timestamp: Int = 0,
        var title: String = "",
        var question: String = "",
        var category: String = "",
        var content: String = "",
        var link: String = ""
) {
    fun Foo() {}
}

使用这样的查询:

FirebaseFirestore.getInstance().collection(COLLECTION_NAME)
                .orderBy(ORDER_KEY, Query.Direction.DESCENDING)
                .limit(LIMIT)
                .get()
        .addOnSuccessListener { snapshot ->
            snapshot.documents.forEach {
                println(it.data) // data print successfully
                // got error java.lang.RuntimeException: Could not deserialize object. Failed to convert a value of type com.google.firebase.firestore.Blob to int (found in field 'timestamp')
                val foo = it.toObject(Foo::class.java)
            }
        }

但收到错误java.lang.RuntimeException: Could not deserialize object. Failed to convert a value of type com.google.firebase.firestore.Blob to int (found in field 'timestamp')

我在我的android项目中使用firebase版本11.6.2

firestore中的数据与此屏幕截图类似:

enter image description here

知道反序列化失败的原因吗?

3 个答案:

答案 0 :(得分:0)

尝试使用:

var timestamp: Blob

而不是:

var timestamp: Int = 0

然后你可以在Blob对象中使用这个方法:

https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/Blob

答案 1 :(得分:0)

我尝试使用Blog和Int变量类型,但它们不适用于Firebase的时间戳。然后,我使用了以下内容并且它正常工作:

import java.util.*
val timestamp: Date? =  null

我希望它也适合你。

答案 2 :(得分:0)

我认为您在模型类中使用了错误的数据类型。

如果您的数据类型在Firestore集合中为时间戳,则在当前使用int的模型中使用Date数据类型为时间戳。

在Java中使用它。

 public Date createdAt;
 public String createdBy;

对于Kotlin,请使用它。

 val timestamp: Date? =  null,
        var title: String = "",
        var question: String = "",
        var category: String = "",
        var content: String = "",
        var link: String = ""