【问题标题】:Unable to Retrieve Objects from Firestore无法从 Firestore 检索对象
【发布时间】:2019-10-08 19:32:30
【问题描述】:

我是 Firebase 和 Kotlin 的新手,我正在尝试用它制作一个应用程序。我有一个名为 Announcements 的数据类,并且我已将 Announcements 的数据保存在 Firestore 中。但是,当我想从 Firestore 中检索我的数据时,它一直给我以下错误:

2019-10-09 03:14:13.016 14552-14552/com.example.finalyearproject W/Firestore: (21.1.1) [CustomClassMapper]: No setter/field for Content found on class com.example.finalyearproject.Announcement
2019-10-09 03:14:13.017 14552-14552/com.example.finalyearproject W/Firestore: (21.1.1) [CustomClassMapper]: No setter/field for Title found on class com.example.finalyearproject.Announcement
2019-10-09 03:14:13.017 14552-14552/com.example.finalyearproject W/Firestore: (21.1.1) [CustomClassMapper]: No setter/field for Id found on class com.example.finalyearproject.Announcement
2019-10-09 03:14:13.018 14552-14552/com.example.finalyearproject W/Firestore: (21.1.1) [CustomClassMapper]: No setter/field for Date found on class com.example.finalyearproject.Announcement

以下是我的代码:

val db = FirebaseFirestore.getInstance()
val announcement = Announcement(_aTitle = "Hello Everyone", _aContent = "A new age begins.", _aDate = Date())
announcement.writeToDatabase()

val mAnnouncements: ArrayList<Announcement> = ArrayList()

db.collection(Announcement.ANNOUNCEMENT_COLLECTION).get().addOnSuccessListener {
            mAnnouncements.addAll(it.toObjects(Announcement::class.java))
}

公告类:

class Announcement(_aId: UUID = UUID.randomUUID(), _aTitle: String = " ", _aContent: String = " ", _aDate: Date = Date()) {

    var aId = _aId
    var aTitle = _aTitle
    var aContent = _aContent
    var aDate = _aDate

    fun writeToDatabase() {

        val db = FirebaseFirestore.getInstance()

        val write = hashMapOf(
            ANNOUNCEMENT_ID to this.aId,
            ANNOUNCEMENT_TITLE to this.aTitle,
            ANNOUNCEMENT_CONTENT to this.aContent,
            ANNOUNCEMENT_DATE to this.aDate
        )

        db.collection(ANNOUNCEMENT_COLLECTION).document(this.aId.toString()).set(write).addOnSuccessListener { Log.d("Success", "Success") }


    }

    companion object {
        const val ANNOUNCEMENT_COLLECTION = "announcement"
        const val ANNOUNCEMENT_ID = "Id"
        const val ANNOUNCEMENT_TITLE = "Title"
        const val ANNOUNCEMENT_CONTENT = "Content"
        const val ANNOUNCEMENT_DATE = "Date"
    }
}

我曾尝试寻找答案,但在 Kotlin 中似乎没有合适的答案。我曾尝试为每个变量添加自定义 getter 和 setter,但它仍然不起作用。

如果有人能够解决我的问题,请提供帮助。提前谢谢!

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    如果您想将 Kotlin 数据类与 documentSnapshot.toObject 一起使用,则必须将数据类的每个字段都设为可为空的 var。 Firestore SDK 不知道如何将文档字段映射到数据类构造函数参数。如果字段可以为空val,则 Kotlin 编译器将为每个字段创建 getter 和 setter,以便 Firestore SDK 发现和调用它们。

    如果您想要一个具有val 字段的正确不可变数据类,您将不得不手动从文档中读取每个字段,并自己调用数据类构造函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多