Нумерация страниц Firestore не работает с запросом, упорядоченным по значению с плавающей точкой - PullRequest
0 голосов
/ 23 июня 2019

Я застрял с нумерацией страниц Firestore. Я пытаюсь сделать запрос упорядоченным по плавающему значению (рейтингу). Если я использую нумерацию страниц с запросом, упорядоченным по имени, он будет работать нормально. Но с рейтингом он загружает первую страницу в цикле и не может получить страницу новых пользователей по последнему увиденному uid. Может причина звучит так: у части пользователей самый высокий рейтинг, но у большинства из них одинаковый, например, у 10 пользователей будет 14,4 балла? Буду очень признателен, если вы дадите мне несколько советов или несколько советов, как исправить эту странную ошибку)

Вот код нумерации страниц:

class SearchRepository {
companion object {
    const val ITEMS_PER_PAGE = 20
}

private var lastUserInPage = ""
private val reference: CollectionReference = FirebaseFirestore.getInstance().collection(Consts.USERS_DB)

//todo: rename getUsersNextPage(isFirstPage: Boolean)
fun getUsers(filterParams: List<SearchModel>, usersListCallback: UsersListCallback, page: Int) {
    var query: Query = reference

    if (!filterParams.isEmpty()) {
        for ((key, value) in filterParams) {
            query = query.whereEqualTo(key, value)
        }
    }

    //not forget to set to zero when using from another fragment
    if (page == 0)
        lastUserInPage = ""

    query
            .orderBy(Consts.RATING)
            .startAt(lastUserInPage)
            .limit(ITEMS_PER_PAGE.toLong())
            .get()
            .addOnCompleteListener { task ->
            putCallbackData(usersListCallback, task) }
}


private fun putCallbackData(usersListCallback: UsersListCallback, task: Task<QuerySnapshot>) {
    val fsUserList = ArrayList<FsUser>()
    for (snapshot in task.result!!.documents) {
        if (isUserExist()) {
            if (snapshot.id != getUid()) {
                fsUserList.add(snapshot.toObject(FsUser::class.java)!!)
            }
        } else {
            fsUserList.add(snapshot.toObject(FsUser::class.java)!!)
        }
    }

    lastUserInPage = fsUserList[fsUserList.size - 1].uid

    // some firebase stuff
    if (fsUserList.size == ITEMS_PER_PAGE) {
        fsUserList.removeAt(fsUserList.size - 1)
    } else if (fsUserList.size == ITEMS_PER_PAGE - 1 && isUserExist()) {
        fsUserList.removeAt(fsUserList.size - 1)
    }


    usersListCallback.setUsers(fsUserList)
}

}

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