我创建了一个类似测验的应用程序,一次提取 10 个问题。如果用户得到 8 分(满分 10 分),那么我会获取接下来的 10 个问题。但开始之后总是给出相同的回应。
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 中编写的。在获得高于 8 的分数后。
我再次打开相同的活动并questionCollectionRef.startAfter
已调用但活动中仍然显示相同的问题
你打电话时startAfter()
(或任何其他查询构建方法),它返回一个新的查询对象。所以你需要保留一个参考that object:
var 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
to questionCollectionQuery
,因为之后的类型orderBy
, startAfter
or limit
是一个查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)