经过几天的努力,我终于找到了这个问题的答案。如果没有@Raj 的帮助,我无法解决这个问题。非常感谢@Raj 的耐心和指导。
首先,根据 @Frank van Puffelen 在他的回答中提供的答案post https://stackoverflow.com/questions/50590989/how-to-add-2-different-queries-inside-an-firestorerecycleradapter,我不再寻找可以帮助我将两个查询传递到单个适配器的解决方案。
在这个问题中,我想要实现的就是查询数据库以获取除我之外的所有用户。因此,因为我们无法将两个查询组合到一个实例中,所以我发现我们可以组合两个查询的结果。所以我创建了两个查询:
FirebaseFirestore db = FirebaseFirestore.getInstance();
Query firstQuery = db.collection("users").whereLessThan("uid", uid);
Query secondQuery = db.collection("users").whereGreaterThan("uid", uid);
我有一个UserModel
我的用户对象的 (POJO) 类。我发现not one, but two解决问题的方法。第一个是查询数据库以获取与第一个条件相对应的所有用户对象并将它们添加到列表中。之后,再次查询数据库,获取符合第二个条件的其他用户对象,并将其添加到same列表。现在我有一个列表,其中包含我需要的所有用户,但只有一个用户,即具有查询中的特定 id 的用户。这是未来访客的代码:
firstQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
List<UserModel> list = new ArrayList<>();
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
UserModel userModel = document.toObject(UserModel.class);
list.add(userModel);
}
secondQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
UserModel userModel = document.toObject(UserModel.class);
list.add(userModel);
}
//Use the list of users
}
}
});
}
}
});
第二种方法会短得多,因为我使用Tasks.whenAllSuccess()
像这样:
Task firstTask = firstQuery.get();
Task secondTask = secondQuery.get();
Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//This is the list that I wanted
}
});