startAfter не работает в Firestore android - PullRequest
0 голосов
/ 15 декабря 2018

Я создал приложение, похожее на викторину, где 10 вопросов выбираются один раз.Если пользователь получил 8 баллов из 10. то я получаю следующие 10 вопросов.Но startAfter всегда дают один и тот же ответ.

val questionCollectionRef = db.collection("questionCollection")
        ///.whereArrayContains("tags", tagName)
        .orderBy("questionID", Query.Direction.DESCENDING);
val id = SharedPrefs(this@McqActivity).read(OLD_DOCUMENT_ID, "")

if(id.isNotEmpty()){
    //questionCollectionRef.whereLessThan("questionID",id) //also tried for whereGreaterThan
    questionCollectionRef.startAfter(id);
    Log.v("startAfter","start After : " + id + "" );
}
questionCollectionRef.limit(10).get()
        //fixme  also orderBy date So user can see latest question first
        .addOnSuccessListener { querySnapshot ->
            if (querySnapshot.isEmpty()) {
                Log.d(TAG, "onSuccess: LIST EMPTY")
            } else {
                val questionList = querySnapshot.toObjects(QuestionBO::class.java)

                questionList.forEach { questionItem ->
                    resultList.add(ResultBO(questionItem))
                }

                if (resultList.size > 0) {
                    refreshQuestionWithData()
                }
            }
        }
        .addOnFailureListener { exception ->
            exception.printStackTrace()
        }

Этот код написан в Activity.After после получения оценки выше 8.

Я снова открываю ту же самую операцию и вызываю questionCollectionRef.startAfter, но все еще тот же вопрос, показанный в действии

1 Ответ

0 голосов
/ 15 декабря 2018

Когда вы вызываете startAfter() (или любой другой метод построения запроса), он возвращает новый объект запроса.Поэтому вам нужно сохранить ссылку на этот объект:

val questionCollectionQuery = db.collection("questionCollection")
        .orderBy("questionID", Query.Direction.DESCENDING);

val id = SharedPrefs(this@McqActivity).read(OLD_DOCUMENT_ID, "")
if(id.isNotEmpty()){
    questionCollectionQuery = questionCollectionQuery.startAfter(id);
    Log.v("startAfter","start After : " + id + "" );
}

questionCollectionQuery.limit(10).get()...

Я также переименовал questionCollectionRef в questionCollectionQuery, поскольку тип после orderBy, startAfter или limit - это запрос.

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