【问题标题】:How to get the correct newIndex when using pagination in Firestore?在 Firestore 中使用分页时如何获得正确的 newIndex?
【发布时间】:2020-07-22 12:45:06
【问题描述】:

我已经根据文档实现了分页。我在我的项目中使用此代码:

override fun onEvent(querySnapshot: QuerySnapshot?, e: FirebaseFirestoreException?) {
    if (e != null) return

    for (documentChange in querySnapshot!!.documentChanges) {
        value = when (documentChange.type) {
            Type.ADDED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
            Type.MODIFIED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
            Type.REMOVED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
        }
    }
}

当我使用此查询获取前 4 个用户时:

var query: Query = db.collection("users")
    .orderBy("name", DESCENDING)
    .limit(4)

我明白了:

A/oldIndex:-1/newIndex:0
B/oldIndex:-1/newIndex:1
C/oldIndex:-1/newIndex:2
D/oldIndex:-1/newIndex:3

这是正确的,因为所有用户都是新用户并且 oldIndex 等于 -1。 newIndex 从 0 增加到 3,这也是正确的。但是,当我使用此查询时:

var secondQuery: Query = db.collection("users")
    .orderBy("name", DESCENDING)
    .startAfter(lastVisibleUser)
    .limit(4)

为了获得接下来的 4 个用户,我得到:

E/oldIndex:-1/newIndex:0
F/oldIndex:-1/newIndex:1
G/oldIndex:-1/newIndex:2
H/oldIndex:-1/newIndex:3

在用户名正确的地方,oldIndex 又是正确的,但 newIndex 从 0 开始,不是应该是从 4 开始。如何才能第二次获得正确的 newIndex?

【问题讨论】:

    标签: android firebase kotlin google-cloud-firestore


    【解决方案1】:

    您为快照获取的索引与同一侦听器的前一个快照进行比较。由于您触发了一个新查询,它是一个新的侦听器,因此所有索引都基于一个空的先前状态。

    要查看索引的工作原理,请将永久侦听器附加到查询,然后更改第一个查询中的一个用户的名称,以便它更改其在结果中的位置。您会看到所有用户的旧索引和新索引都根据前一个快照和新状态进行更新。

    【讨论】:

    • 为了获得您在此处尝试使用的索引,您必须使用单个侦听器。如果您尝试实现分页,则需要多个侦听器,但在这种情况下,您不能使用索引 - 因为它们将为每个侦听器单独计算。
    猜你喜欢
    • 2020-01-10
    • 2019-10-31
    • 1970-01-01
    • 2019-10-05
    • 2022-11-07
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多