Firestore – 在本地合并两个查询
由于Firestore中没有逻辑OR
运算符,因此我尝试在本地合并2个单独的查询。
现在我想知道如何保持结果的正确顺序。 当我独立运行2个查询时,我无法特定地查询结果(至少不是我使用orderBy
方法从Firestore获取结果的顺序)。
我的想法是将第二个查询放在第一个查询的onSuccessListener
中。 这是一个表现明智的坏主意吗?
public void loadNotes(View v) { collectionRef.whereLessThan("priority", 2) .orderBy("priority") .get() .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) { Note note = documentSnapshot.toObject(Note.class); //adding the results to a List } collectionRef.whereGreaterThan("priority", 2) .orderBy("priority") .get() .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) { Note note = documentSnapshot.toObject(Note.class); //adding the results to a List } } }); } }); }
要在本地合并2个单独的查询,我建议您使用Tasks.whenAllSuccess()
方法。 您可以使用以下代码行来实现此目的:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance(); Query firstQuery = rootRef... Query secondQuery = rootRef... Task firstTask = firstQuery.get(); Task secondTask = secondQuery.get(); Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener>() { @Override public void onSuccess(List
如您所见,当覆盖onSuccess()
方法时,结果是一个对象list
,它具有作为参数传递到whenAllSuccess()
方法的任务的确切顺序。
还有另一种方法,那就是使用Tasks.continueWith()
方法。 但是根据你的应用程序的用例,你可以使用whenAllSuccess()
方法或continueWith()
方法。 请在这里看到官方文档 。
- 使用Glide从Firebase存储中获取图像
- Android – Firebase – 获取子数据的子项
- 将新值添加到Firebase实时数据库时如何保存当前日期/时间
- 有没有办法在我从Firebase对象转换的类中存储Key?
- 如何在RecyclerView项中的populateViewHolder中设置addSnapshotListener并删除?
- 在发送数据时,从Android应用中的Firebase检索ServerValue.Timestamp
- 如何使用Firebase Google Maps API Android中的数据更新标记位置
- StorageException:代码:-13000 HttpResult:0将文件上传到Firebase
- Firestore:查询android中数组中的所有元素