【发布时间】:2020-06-28 03:33:15
【问题描述】:
在我的 Firestore 数据库中,有 12 个以上的文档。我通过调用以下函数 on button click 正确获取了前 3 个文档。但是在secondclick 上,虽然正确传递了documentReference,但它没有检索任何数据。querySnapshot 大小即将变为0。可能是什么问题。
下面是声明
private val db: FirebaseFirestore = FirebaseFirestore.getInstance()
private val colRef: CollectionReference = db.collection("Notebook")
private var lastResult: DocumentReference? = null
private lateinit var query: Query
以下是onButtonClick代码:
private fun loadNoteNew() {
@Suppress("SENSELESS_COMPARISON", "LiftReturnOrAssignment")
if (lastResult == null) {
query = colRef.orderBy("priority")
.limit(3)
} else {
Log.i(TAG, "Start ${lastResult!!.id}")
query = colRef.orderBy("priority")
.startAfter(lastResult)
.limit(3)
}
Log.i(TAG, "before get")
query.get()
.addOnSuccessListener { querySnapshot ->
var data = ""
Log.i(TAG, "querySnapshot Size : ${querySnapshot.size()}")
if (lastResult != null) {
Log.i(TAG, "querySnapshot ID : ${lastResult!!.id}")
}
for (snapshot in querySnapshot) {
val note = snapshot.toObject(Note::class.java)
note.id = snapshot.id
val title = note.title
val desc = note.description
val priority = note.priority
data += "${note.id} \nTitle =$title \nDescription = $desc\nPriority : $priority\n\n"
}
if (querySnapshot.size() > 0) {
data += "---------------\n\n"
textView_loadData.append(data)
lastResult = querySnapshot.documents[querySnapshot.size() - 1].reference
Log.i(TAG, lastResult!!.id)
}
}
}
下面是第一次点击的logcat
I/FireStoreExample: before get
I/FireStoreExample: querySnapshot Size : 3
I/FireStoreExample: P9hIw4Ai7w4IHP6H3ew3
下面给出的是第二次点击的logcat
I/FireStoreExample: Start P9hIw4Ai7w4IHP6H3ew3
I/FireStoreExample: before get
I/FireStoreExample: querySnapshot Size : 0
I/FireStoreExample: querySnapshot ID : P9hIw4Ai7w4IHP6H3ew3
请帮我找出我哪里弄错了。 谢谢
【问题讨论】:
-
您实际上并没有使用 startAt 而是 startAfter 并且您将限制设置为 3,因此它只会返回 3 个元素 firebase.google.com/docs/firestore/query-data/…
标签: android firebase kotlin google-cloud-firestore