我想将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中的数据与此屏幕截图类似:
知道反序列化失败的原因吗?
答案 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 = ""