2017-11-13 9 views
0

Ich habe eine Service-Planung Bildschirm.Wiederherstellen von Daten Firestore Collection

Aber es gibt ein Problem:

ich überprüfen müssen, ob das Datum und die Uhrzeit der Benutzer zu planen versucht verfügbar oder reserviert ist.

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 

ich zugreifen Scheduling-Daten mit diesem Code:

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

     } 
    } 
}) 

Prozess:

Ich brauche diesen Code auszuführen und alle Dokumente in dieser Sammlung zu gehen. Ich muss überprüfen und analysieren, ob Datum und Uhrzeit des Zeitplans bereits vorhanden sind.

Wenn es gibt: Zeigen Sie einen Toast und blockieren Sie.

Wenn es keine: Ausführen einer bestimmten Funktion für den Zeitplansatz ("startScheduling()").

Problem:

Wenn die Daten vorhanden sind (es wird nur ein einziges Mal sein), dann wird es funktionieren.

Wenn keine Daten vorhanden sind, fällt es in die ELSE-Schleife. Und es führt mehrmals die gleiche Funktion "startScheduling();" aus.

Ich brauche einen Weg durch diese Sammlung zu gehen, und wenn ich keine Ergebnisse finden, die Funktion „startScheduling(), nur einmal ausgeführt werden.

Antwort

1

diese, wie ein for loop funktioniert. Es Iterierte fortsetzen wird, bis Das letzte Element, um zu sehen, ob die Bedingung wahr ist oder nicht.Mit anderen Worten, Ihre if-else statement wird für jede Iteration in der Schleife ausgelöst.Es bedeutet, dass, wenn die Bedingung true ist, wird es mit der if part gehen, wenn die Bedingung ist false es wird mit else part gehen, für jedes Element.

Es gibt Zwei Möglichkeiten, wie Sie das lösen können. Eine wäre break die Schleife, sobald die Bedingung erfüllt wurde. Aber das bedeutet, dass iteriert wird, bis es dieses Element bekommt. Zweitens, wäre es, die Logik Ihres Codes zu ändern. Verwenden Sie zuerst die if-Anweisung und die zweite Iteration.

Bearbeiten: Die beste Option in diesem Fall wäre die Abfrage Ihrer Datenbank mit whereEqualTo() Methode.

Query query = db 
    .collection("Companies") 
    .document(mId_Company) 
    .collection("Schedules") 
    .whereEqualTo("dtSchedules", dateExample) 
    .whereEqualTo("hourSchedules", hourExample); 

In dem dateExample und hourExample sind die tatsächlichen Werte, mit denen Sie vergleichen möchten.

Um die Anzahl der Dokumente in einer Sammlung zu zählen, benutzen Sie bitte den folgenden Code verwenden:

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

Können Sie mir helfen mit, dass? @AlexMamo – TiagoIB

+0

Ich gab Ihnen 2 Lösungen. Welche kann man nicht umsetzen? –

+0

So wie es heute ist. Was ist das [email protected] – TiagoIB

Verwandte Themen