我有一个服务安排屏幕。
但是有一个问题:
我需要检查用户尝试安排的日期和时间是否可用或保留。
Structure DB:
Companies
-Company ID (Document)
--name
--phone
---Schedules (Collection)
------Event1
--------Hour: 08:30
--------Date: 01/01/2018
------Event2
--------Hour: 09:00
--------Date: 05/01/2018
------Event3
--------Hour: 10:30
--------Date: 01/002/2018
我使用以下代码访问调度数据:
String dateExample = "01/01/2018"
String hourExample = "08:30"
FirebaseFirestore mDB = FirebaseFirestore.getInstance();
CollectionReference mDBCompaniesSchedules = (CollectionReference) mDB.collection("Companies").document(mId_Company).collection("Schedules")
.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot documentSnapshots) {
for (Schedules document : documentSnapshots.toObjects(Schedules.class)) {
String dtSchedules = document.getSchedules_date();
String hourSchedules = document.getSchedules_hour();
if ( dtSchedules.equals(dateExample) && hourSchedules.equals(hourExample) ){
//Execute a "Toast" and closes the operation
} else {
//Call up the scheduling function.
startScheduling();
}
}
}
})
过程:
我需要运行此代码并浏览该集合中的所有文档。我需要检查并分析时间表的日期和时间是否已经存在。
如果有:显示Toast并阻止。
如果没有:执行计划记录的特定功能(&#34; startScheduling()&#34;)。
问题:
当数据存在时(它只会是一次)然后就可以了。
当没有数据时,它会进入ELSE循环。并且它正在多次执行相同的功能&#34; startScheduling();&#34;。
我需要一些方法来浏览这个集合,当我找不到任何结果时,函数&#34; startScheduling()只执行一次。
答案 0 :(得分:2)
这是for loop
的工作原理。它将继续迭代直到最后一个元素,以查看条件是否为真。换句话说,循环中的每次迭代都会触发if-else statement
。这意味着,如果条件为true
,那么它将与if part
一起使用,如果条件为false
,则它将与else part
一起用于每个元素。< / p>
有两种方法可以解决这个问题。一旦满足条件,就可以break
循环。但这意味着将迭代直到它获得该元素。其次,将改变你的代码的逻辑。首先使用if语句和第二次迭代。
编辑:在这种情况下,最好的选择是使用whereEqualTo()
方法查询您的数据库。
Query query = db
.collection("Companies")
.document(mId_Company)
.collection("Schedules")
.whereEqualTo("dtSchedules", dateExample)
.whereEqualTo("hourSchedules", hourExample);
dateExample
和hourExample
是您要与之比较的实际值。
要计算集合中的文档数量,请使用以下代码:
public void onSuccess(QuerySnapshot documentSnapshots) {
if(documentSnapshots.size() == 0) {
startScheduling();
}
for (Schedules document : documentSnapshots.toObjects(Schedules.class)) {
String dtSchedules = document.getSchedules_date();
String hourSchedules = document.getSchedules_hour();
}
}