恢复数据Firestore集合

时间:2017-11-13 18:20:40

标签: android firebase google-cloud-firestore

我有一个服务安排屏幕。

但是有一个问题:

我需要检查用户尝试安排的日期和时间是否可用或保留。

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()只执行一次。

1 个答案:

答案 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);

dateExamplehourExample是您要与之比较的实际值。

要计算集合中的文档数量,请使用以下代码:

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(); 
    }
}