gpt4 book ai didi

java - 如何在 Firestore 查询的组合任务中获取最后一个可见的 DocumentSnapshot?

转载 作者:行者123 更新时间:2023-12-01 17:43:23 25 4
gpt4 key购买 nike

我正在组合两个查询来对 Firestore 集合执行“不等于”查询,这在 Firestore 中 native 不可能实现,因此我必须在本地执行此操作。我需要获取组合任务的最后一个可见文档以用于分页。

以下是我编写的代码,用于从两个查询结果中获取文档列表。

    Query first = firebaseFirestore
.collection("jobs")
.whereGreaterThan("createdBy",currentUser.getEmail())
.orderBy("createdDate",Query.Direction.ASCENDING)
.limit(2);
Query second = firebaseFirestore
.collection("jobs")
.whereLessThan("createdBy",currentUser.getEmail())
.orderBy("createdDate",Query.Direction.ASCENDING)
.limit(2);

Task<QuerySnapshot> firstTask = first.get();
Task<QuerySnapshot> secondTask = second.get();


final Task<List<QuerySnapshot>> combinedTask = Tasks.whenAllSuccess(firstTask, secondTask);
combinedTask.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
@Override
public void onSuccess(List<QuerySnapshot> querySnapshots) {
List<Job> list = new ArrayList<>();
for(QuerySnapshot qs: querySnapshots){
for(DocumentSnapshot document: qs){
Job job = document.toObject(Job.class);
list.add(job);
}
}

JobAdapter jobAdapter = new JobAdapter(list);
recyclerView.setAdapter(jobAdapter);

DocumentSnapshot lastVisible = combinedTask.getResult().get()

}
});

在行

 DocumentSnapshot lastVisible = combinedTask.getResult().get()

我只能访问第一个查询或第二个查询中的文档,因此我不确定如何获取最后一个可见文档,我认为最后一个文档在逻辑上来 self 的第二个查询,但我不确定。

这是我为完成此任务而遵循的教程:

https://www.youtube.com/watch?v=KdgKvLll07s

最佳答案

您可以通过简单地创建 lastVisible 来解决这个问题作为类中的全局变量:

private DocumentSnapshot lastVisible;

然后在for循环中赋值:

final Task<List<QuerySnapshot>> combinedTask = Tasks.whenAllSuccess(firstTask, secondTask);
combinedTask.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
@Override
public void onSuccess(List<QuerySnapshot> querySnapshots) {
List<Job> list = new ArrayList<>();
for(QuerySnapshot qs: querySnapshots){
for(DocumentSnapshot document : qs){
Job job = document.toObject(Job.class);
list.add(job);
lastVisible = qs.getDocuments().get(qs.size() - 1);
}
}
Query nextQuery = firebaseFirestore
.collection("jobs")
.whereGreaterThan("createdBy",firebaseAuth.getCurrentUser().getEmail())
.orderBy("createdDate",Query.Direction.ASCENDING)
.startAfter(lastVisible)
.limit(2);

//Use the nextQuery
}
});

查看调用 .startAfter(lastVisible) 的电话?所以这会起作用,因为在 for 循环结束时,lastVisible对象将始终保留最后一个 DocumentSnapshot 的值对象。

附注感谢您使用我的教程作为 Firestore 分页示例:)

关于java - 如何在 Firestore 查询的组合任务中获取最后一个可见的 DocumentSnapshot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com