Android 无法从Firestore检索对象
我是Firebase和Kotlin的新手,正在尝试使用它进行应用。我有一个名为Announcements的数据类,我已将用于公告的数据保存在Firestore中。但是,当我想从Firestore检索数据时,它总是给我以下错误:Android 无法从Firestore检索对象,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我是Firebase和Kotlin的新手,正在尝试使用它进行应用。我有一个名为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
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))
}
我试图寻找答案,但在科特林似乎没有合适的答案。我曾尝试为每个变量添加自定义getter和setter,但仍然不起作用
如果有人能解决我的问题,请帮忙。提前谢谢你 如果要将Kotlin数据类与一起使用,则必须将数据类的每个字段设置为可为null的
var
。Firestore SDK不知道如何将文档字段映射到数据类构造函数参数中。如果字段可为空val
,则Kotlin编译器将为每个字段创建getter和setter,以便Firestore SDK可以发现和调用它们
如果您想要一个包含val
字段的适当的不可变数据类,您必须手动读取文档中的每个字段,并自己调用数据类构造函数
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"
}
}