我正在使用Kotlin和Firebase开发一个Android原生应用程序,我有一个名为Topic的集合和2个类型引用字段,一个用于User,另一个用于Category,我试图通过引用文档获取所有文档,但似乎不起作用:
db.collection("topic").get().addOnSuccessListener { result ->
for (document in result) {
Log.e("success", "${document.id} => ${document.data.get("subject")}")
var topic: Topic = Topic(
document.id as String,
document.data.get("subject") as String,
document.data.get("content") as String,
document.data.get("created_at") as String,
document.getDocumentReference("Category") as Category,
document.getDocumentReference("User") as User
)}
字符串
没有错误,但在我的打印(主题)中也没有结果。
这是主题类
class Topic : Serializable {
var id : String = ""
var subject : String = ""
var content : String = ""
var created_at : String = ""
var cat = Category()
var user = User()
constructor(){}
constructor(
id: String,
subject: String,
content: String,
created_at: String,
cat: Category,
user: User
) {
this.id = id
this.subject = subject
this.content = content
this.created_at = created_at
this.cat = cat
this.user = user
}
override fun toString(): String {
return "Topic(id='$id', subject='$subject', content='$content', created_at='$created_at', cat=$cat, user=$user)"
}
}
型
的数据
2条答案
按热度按时间c0vxltue1#
您必须通过单独的
get()
调用显式地获取每个引用的文档。没有办法在您当前的呼叫中自动获取它们。所以类似于:
字符串
另见:
fjaof16o2#
当您使用以下代码行时:
字符串
您将获得一个
DocumentReference
类型的对象,而不是Category
类型的对象,因为DocumentSnapshot的getDocumentReference()方法返回该类型的对象。请记住,在Kotlin中,您无法将DocumentReference
类型的对象转换为Category
,因此才会出现这种行为。因此,简单地获取对象的引用将返回对象本身的假设是不正确的。你可以解决这个问题的唯一方法是为每个人单独打电话,正如@FrankvanPuffelen在他的回答中提到的那样。
作为一个单独的主题,你也可以从下面的帖子中看看我的答案,因为我看到你在文档中使用了不同的属性命名: