android - Firestore 分页 : StartAfter query with DocumentSnapshot not working

标签 android firebase kotlin google-cloud-firestore

我的 firestore 数据库中保存了一份报价/交易列表。我想获取按降序折扣排序的前 3 笔交易,即折扣最高的交易排在第一位,然后是次高的,依此类推。我以 3 段为单位获取它们。

How i sorted them firebase console

My sorted database based on discount

我正在尝试使用 android 代码实现相同的目标。因此,折扣为 55、44、28 的前 3 个元素应该先出现,然后是 27、27、21,最后是 19、4。

class ContentGenerationActivityV1 : AppCompatActivity() {

     var lastDocument : DocumentSnapshot?= null
     lateinit var filterQuery: Query

     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_content_generation)

        val doc = FirebaseFirestore.getInstance().collection("steal-deals").document("deals")

       filterQuery = doc.collection(getTodayTimeStamp().toString())
        .orderBy("discount", Query.Direction.DESCENDING)

       filterFetchButton.setOnClickListener {
           if(lastDocument == null){
              fetchFirstFew()
           } else {
            fetchMore()
        }
    }
}

//Get first 3 elements
fun fetchFirstFew(){

    Log.d("N/W CALL ::", "FIRST")

    filterQuery.limit(3) .get()
        .addOnSuccessListener { result ->

            lastDocument = result.documents.last()

            for (document in result) {
                Log.d("DEAL :: ", "${document.id} => ${document.data}")
            }

        }


}

//Get the next 3 elements
fun fetchMore(){

    Log.d("N/W CALL ::", "SECOND")

    filterQuery.startAfter(lastDocument)
        .limit(3).get()
        .addOnSuccessListener { result ->

            lastDocument = result.documents.last()

            for (document in result) {
                Log.d("DEAL :: ", "${document.id} => ${document.data}")
            }


        }
}

但无论如何它总是返回前三个元素 (55,44,28)。 enter image description here

请指导我实现同样的目标。

最佳答案

我遇到了同样的问题,但经过一些研究发现“startAfter(lastDocument)”返回了一个新的查询实例,您需要获取该实例并在该实例上调用限制。

val query = filterQuery.startAfter(lastDocument)
query.limit(3).get().addOnSuccessListener {}

关于android - Firestore 分页 : StartAfter query with DocumentSnapshot not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57933327/

相关文章:

java - Android游戏-当实体从列表中删除时的屏幕闪烁

android - 如何像下面的结果一样在 android 中编码 url?

Android Activity 测试 - 测试重启

android - 从我的服务向我的 Activity 发送消息?

ios - 使用 Facebook 为 iOS 设置 Firebase 简单登录

android - recyclerview适配器android中的数据绑定(bind)?

android - 文本转语音未按预期工作

node.js - 使用 Firebase 获取 downloadURL 不断抛出错误 'XMLHttpRequest is not defined'

java.lang.IllegalStateException 在 android.app.ContextImpl.startServiceCommon

java - 以编程方式撤销 Android 中的另一个应用程序权限