我在firestore数据库中保存了一份要约/交易清单。我想按降序获取按折扣排序的前3个交易,即折扣最高的交易排在第一位,然后是第二高的交易,依此类推。我正在以3的段来获取它们。
我正在尝试使用android代码实现相同的目的。因此,应首先对折价55,44,28的前三个元素进行排序,然后对27,27,21进行折扣,最后对19,4进行折扣。
class ContentGenerationActivityV1 : AppCompatActivity() {
var lastDocument : DocumentSnapshot?= null
lateinit var filterQuery: Query
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_content_generation)
val doc = FirebaseFirestore.getInstance().collection("steal-deals").document("deals")
filterQuery = doc.collection(getTodayTimeStamp().toString())
.orderBy("discount", Query.Direction.DESCENDING)
filterFetchButton.setOnClickListener {
if(lastDocument == null){
fetchFirstFew()
} else {
fetchMore()
}
}
}
//Get first 3 elements
fun fetchFirstFew(){
Log.d("N/W CALL ::", "FIRST")
filterQuery.limit(3) .get()
.addOnSuccessListener { result ->
lastDocument = result.documents.last()
for (document in result) {
Log.d("DEAL :: ", "${document.id} => ${document.data}")
}
}
}
//Get the next 3 elements
fun fetchMore(){
Log.d("N/W CALL ::", "SECOND")
filterQuery.startAfter(lastDocument)
.limit(3).get()
.addOnSuccessListener { result ->
lastDocument = result.documents.last()
for (document in result) {
Log.d("DEAL :: ", "${document.id} => ${document.data}")
}
}
}
请指导我,以达到同样的目的。
答案 0 :(得分:0)
我刚遇到这个问题。
所以,在您的代码中
错误:
filterQuery.limit(3) .get()
.addOnSuccessListener { result ->
lastDocument = result.documents.last()
for (document in result) {
Log.d("DEAL :: ", "${document.id} => ${document.data}")
}
}
是:
filterQuery = filterQuery.limit(3) .get()
.addOnSuccessListener { result ->
lastDocument = result.documents.last()
for (document in result) {
Log.d("DEAL :: ", "${document.id} => ${document.data}")
}
}
因为链接到查询时,它将创建并返回一个新查询,该查询在提供的文档(不包括)之后开始。所以你必须重新分配它!
如果对您有好处,请投票支持!
答案 1 :(得分:0)
我遇到了同样的问题,但是经过一些研究发现,“ startAfter(lastDocument)”返回了一个新的Query实例,您需要获取该实例,并在该实例上调用限制。
val query = filterQuery.startAfter(lastDocument)
query.limit(3).get().addOnSuccessListener {}