【问题标题】:why I always get empty documents when using pagination in Firestore为什么我在 Firestore 中使用分页时总是得到空文档
【发布时间】:2019-12-14 15:56:15
【问题描述】:

我正在尝试通过使用文档快照来定义查询光标来使用分页。

第一次打开片段时,在 onCreateView 中我使用下面的代码从 firestore 获取 7 个事件

fun getAllSearchedEventsFromTheBeginning(startDate: Date, endDate: Date, selectedCity: String, selectedEventType: String, limit: Long, completion: (errorMessage:String?, events: ArrayList<Event>?, lastDocument: DocumentSnapshot?) -> Unit) {

        // not only free events, paid events are also included

        FirestoreCollectionReference.event.getReference()
            .whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,selectedCity)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_EVENT_TYPE, selectedEventType)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_HAS_BEEN_APPROVED,true)
            .whereGreaterThan(FIRESTORE_EVENT_FIELD_DATE_START_TIME,startDate)
            .whereLessThan(FIRESTORE_EVENT_FIELD_DATE_START_TIME,endDate)
            .orderBy(FIRESTORE_EVENT_FIELD_DATE_START_TIME, Query.Direction.ASCENDING)
            .limit(limit)
            .get()
            .addOnSuccessListener { snapshot ->

                val lastDocument = snapshot.documents[snapshot.size() - 1]

                val eventDocuments = snapshot.documents

                val eventArray = ArrayList<Event>()

                for (document in eventDocuments) {
                    val eventData = document.data
                    val event = Event(dataEvent = eventData)
                    eventArray.add(event)
                }

                completion(null,eventArray, lastDocument)

            }.addOnFailureListener {
                completion(it.localizedMessage,null,null)
            }

    }

我正在使用 lamda 表达式,发送 lastVisible 文档,该 lastVisible 文档将用作我下一个查询的起点

到达回收站视图的底部后,我使用下面的代码从 firestore 获取接下来的 7 个文档

fun getAllSearchedEventsAfterLastDocument(startDate: Date, endDate: Date, selectedCity: String, selectedEventType: String, limit: Long, lastDocument: DocumentSnapshot?, completion: (errorMessage:String?, events: ArrayList<Event>?, lastDocument: DocumentSnapshot?) -> Unit) {

        // not only free events, paid events are also included

        FirestoreCollectionReference.event.getReference()
            .whereEqualTo(FIRESTORE_EVENT_FIELD_CITY,selectedCity)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_EVENT_TYPE, selectedEventType)
            .whereEqualTo(FIRESTORE_EVENT_FIELD_HAS_BEEN_APPROVED,true)
            .whereGreaterThan(FIRESTORE_EVENT_FIELD_DATE_START_TIME,startDate)
            .whereLessThan(FIRESTORE_EVENT_FIELD_DATE_START_TIME,endDate)
            .orderBy(FIRESTORE_EVENT_FIELD_DATE_START_TIME, Query.Direction.ASCENDING)
            .limit(limit)
            .startAfter(lastDocument)
            .get()
            .addOnSuccessListener { snapshot ->

                val eventDocuments = snapshot.documents

                if (eventDocuments.isEmpty()) {

                    completion("Event is empty",null, null)

                } else {

                    val lastDocument = snapshot.documents.last()

                    val eventArray = ArrayList<Event>()

                    for (document in eventDocuments) {
                        val eventData = document.data
                        val event = Event(dataEvent = eventData)
                        eventArray.add(event)
                    }

                    completion(null,eventArray, lastDocument)
                }





            }.addOnFailureListener {
                completion(it.localizedMessage,null,null)
            }

    }

我确信我向这两个函数发送了相同的参数, 最后一个文件也是正确的,和我的回收站视图中出现的最后一个文件完全一样。

但如果调用第二个函数getAllSearchedEventsAfterLastDocument,我总是得到空文档

下面的这一行总是在getAllSearchedEventsAfterLastDocument 中触发。

if (eventDocuments.isEmpty()) {
    completion("Event is empty",null, null)
}

请帮帮我,我很困惑。

【问题讨论】:

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

我终于找到问题了,

.startAfter(lastDocument)

lastDocument 仍然是可空类型(DocumentSnapshot?),它不应该。

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多