【发布时间】:2021-02-02 20:35:31
【问题描述】:
长话短说,我正在为火车时间戳制作应用程序,因此我有一个云 Firestore 数据库作为我的数据库。问题的关键在于,当用户找到特定的出发时间时,我使用 whereGreaterThanOrEqualTo 来搜索时间,即特定的分钟和小时。如果用户尝试查找 8:30 的路线,则应用程序应返回到该时间附近的下一条路线。但是当用户点击找到路线时,应用程序崩溃了......这是错误:
java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.projekatidemovozom/com.example.projekatidemovozom.SecondActivity}: java.lang.IllegalArgumentException: All where 过滤器不等式(notEqualTo、notIn、lessThan、lessThanOrEqualTo 、greaterThan 或greaterThanOrEqualTo) 必须在同一字段上。但是您在“departure.hours”和“departure.minutes”上有过滤器
这是我从数据库中获取数据的代码:
public void initDatabaseConnection() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference timestampsRef = db.collection("timestamps");
timestampsRef.whereEqualTo("route.cityFrom", cityOd)
.whereEqualTo("route.cityTo", cityDo)
.whereGreaterThanOrEqualTo("departure.hours", hours) //ISSUE LINE
.whereGreaterThanOrEqualTo("departure.minutes", minutes) //ISSUE LINE
.get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
TimestampModel tm = document.toObject(TimestampModel.class);
timestampModelList.add(tm);
Log.d(TAG, tm.toString());
}
} else {
Log.w(TAG, "Error getting documents.", task.getException());
}
});
}
这是我的数据库结构:
那么你知道是什么问题吗?
【问题讨论】:
-
例外情况似乎很明显:你不能在不同的字段上有两个
whereGreaterThanOrEqualTo语句。 TBH,我不认为您的查询按预期工作 - 9:00 将不匹配,因为 0 小于 30 分钟。为什么小时和分钟是不同的字段? -
最后一部分实际上是一个很好的解决方案@ianhanniballake,因为它允许使用不同(单字段)查询的用例。你能写出来作为答案吗?否则很可能这将作为同一错误消息中另一个问题的重复而被关闭。
-
啊,好吧,我没注意到不能有两个
whereGreaterThanOrEqualTo语句。谢谢,我为这个答案竖起了大拇指:) @ianhanniballake 我想将其设置为答案,但我不能... :( @FrankvanPuffelen
标签: java android firebase google-cloud-firestore