猿问

Firestore 使用 startAfter() 和 limit() 返回空查询

我正在尝试使用 Firebase Firestore startAfter()和limit()查询方法实现分页系统。第一个查询成功返回,但第二个查询返回空快照。


这是我的getNextPage()方法:


fun getNextPage(paginationSize : Long) : TrendingRepository {

database.collection("app")

    .document("data")

    .collection("offers")

    .orderBy("discount")

    .startAfter(lastVisible)

    .limit(paginationSize)

    .get().addOnSuccessListener { snapshot ->


        Log.i("TrendingRepo", "pagination size : $paginationSize")

        val newList = ArrayList<Offer>()


        if (!snapshot.isEmpty) {

            lastVisible = snapshot.documents[snapshot.size() - 1]

        }


        for (document in snapshot) {

            val item = document.toObject(Offer::class.java)

            newList.add(item)

            Log.i("TrendingRepo", "at position: ${newList.indexOf(item)} got item: ${item.id}")

        }


        successListener?.onSuccess(newList)


    }.addOnFailureListener {

        failureListener?.onFailure(it.localizedMessage)

    }


return this

}

这是我的 Logcat:


TrendingRepo: pagination size : 48 // 第一次尝试


TrendingRepo:在位置:0 得到项目:0pqcRzSd06WWlNNmcolu


TrendingRepo:在位置:1 得到了项目:7I7wiSYt5yEBWwN08bqJ


...


TrendingRepo:在位置:45 得到项目:4B3dEPhFLqhKrYpLWYE7


TrendingRepo:在位置:46 得到项目:4ddLqiGe8ReXW8SKq2Q6


TrendingRepo:在位置:47 得到项目:4uVnnGNAmKvGUUHcV01n


TrendingRepo: pagination size : 48 // 第二次尝试


//不再记录,数据为空


HUWWW
浏览 132回答 1
1回答

qq_笑_17

可能存在项目小于分页大小的情况所以这里是代码private var lastVisible: DocumentSnapshot? = nullprivate var isLastPage: Boolean = falseprivate var isDocEmpty: Boolean = falsevar ref: Task<QuerySnapshot>? = null&nbsp;if (lastVisible != null) {ref = database.collection("app").document("data").collection("offers").orderBy("discount").startAfter(lastVisible).limit(paginationSize).get()&nbsp;} else {ref = database.collection("app").document("data").collection("offers").orderBy("discount").limit(paginationSize).get()&nbsp;}&nbsp;ref.addOnSuccessListener { documents ->&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hideProgress()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isDocEmpty = documents.isEmpty&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!isDocEmpty) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastVisible = documents.last()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isLastPage = documents.size() < paginationSize&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isLoading = false&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .addOnFailureListener { exception ->&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Log.w("TAG", "Error getting documents: ", exception)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isLoading = false&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hideProgress()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }我希望这会帮助你。
随时随地看视频慕课网APP

相关分类

Java
我要回答