Android - Firestore возвращает пустой запрос, используя startAfter () и limit () - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь реализовать систему разбивки на страницы, используя 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: размер пагинации: 48 // первая попытка

TrendingRepo: в позиции: 0 получил элемент: 0pqcRzSd06WWlNNmcolu

Тенденция Репо: в позиции: 1 получил предмет: 7I7wiSYt5yEBWwN08bqJ

...

TrendingRepo: в позиции: 45 получил предмет: 4B3dEPhFLqhKrYpLWYE7

TrendingRepo: в позиции: 46 получил предмет: 4ddLqiGe8ReXW8SKq2Q6

Тенденция Репо: в позиции: 47 получил предмет: 4uVnnGNAmKvGUUHcV01n

TrendingRepo: размер пагинации: 48 // вторая попытка

// больше не ведение журнала, данные пусты

1 Ответ

1 голос
/ 24 июня 2019

Может быть случай, когда элементы меньше размера нумерации страниц. Вот код

private var lastVisible: DocumentSnapshot? = null
private var isLastPage: Boolean = false
private var isDocEmpty: Boolean = false

var ref: Task<QuerySnapshot>? = null

 if (lastVisible != null) {
ref = database.collection("app").document("data").collection("offers").orderBy("discount").startAfter(lastVisible).limit(paginationSize).get()
 } else {
ref = database.collection("app").document("data").collection("offers").orderBy("discount").limit(paginationSize).get()
 }


 ref.addOnSuccessListener { documents ->

            hideProgress()
            isDocEmpty = documents.isEmpty



            if (!isDocEmpty) {
                lastVisible = documents.last()
                isLastPage = documents.size() < paginationSize
            }

            isLoading = false
        }
            .addOnFailureListener { exception ->
                Log.w("TAG", "Error getting documents: ", exception)
                isLoading = false
                hideProgress()
            }

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...