java – Firestore – 在本地合并两个查询
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Firestore – 在本地合并两个查询,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1824字,纯文字阅读大概需要3分钟。
内容图文
![java – Firestore – 在本地合并两个查询](/upload/InfoBanner/zyjiaocheng/747/1441571fc69847bdb28d474d9db70b58.jpg)
由于Firestore中没有逻辑OR运算符,因此我尝试在本地合并2个单独的查询.
现在我想知道如何保持结果的正确顺序.当我独立运行2个查询时,我无法特定地查询结果(至少不是我使用orderBy方法从Firestore获取结果的顺序).
我的想法是将第二个查询放在第一个查询的onSuccessListener中.这是一个表现明智的坏主意吗?
public void loadNotes(View v) {
collectionRef.whereLessThan("priority", 2)
.orderBy("priority")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@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<QuerySnapshot>() {
@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<List<Object>>() {
@Override
public void onSuccess(List<Object> list) {
//Do what you need to do with your list
}
});
如您所见,当覆盖onSuccess()方法时,结果是一个对象列表,其具有作为参数传递到whenAllSuccess()方法的任务的确切顺序.
还有另一种方法,那就是使用Tasks.continueWith()方法.但根据您的应用程序的用例,您可以使用eiter whenAllSuccess()方法或continueWith()方法.请看这里official documentation.
内容总结
以上是互联网集市为您收集整理的java – Firestore – 在本地合并两个查询全部内容,希望文章能够帮你解决java – Firestore – 在本地合并两个查询所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。