2017-11-13 6 views
0

서비스 예약 화면이 있습니다.데이터 복구 Firestore Collection

그러나 문제가있는 것입니다 :

나는 사용자가 예약하려는 날짜와 시간을 사용할 수 또는 예약 된 경우 확인 필요.

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

     } 
    } 
}) 

프로세스 :

가이 코드를 실행하고 해당 모음에있는 모든 문서를 이동해야합니다. 스케줄의 날짜와 시간이 이미 있는지 확인하고 분석해야합니다.

인 경우 : 토스트하고 차단하십시오.

이없는 경우 : 일정 레코드 ("startScheduling()")에 특정 기능을 실행합니다.

문제 :

데이터 (그것은 단지 한 번있을 것입니다) 존재

다음이 작동합니다.

데이터가 없으면 ELSE 루프에 속합니다. 그리고 같은 함수 "startScheduling();"을 여러 번 실행합니다.

나는이 컬렉션을 통해 갈 수있는 방법이 필요하고 내가 어떤 결과를 찾을 수없는 경우, 함수는 "startScheduling()는 한 번만 실행. 어떻게 for loop 작품

답변

1

이 있습니다. 그것은 때까지 반복 처리를 계속합니다 조건이 참인지 아닌지 확인하는 마지막 요소입니다. 즉, 루프의 모든 반복에 대해 if-else statement이 트리거됩니다. 즉, 조건이 true 인 경우 if part과 함께 표시되고 조건이 false 인 경우 각 요소에 대해 else part과 함께 표시됩니다.

당신이 이것을 풀 수있는 두 가지 방법. 조건이 충족되면 루프가 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(); 
    } 
} 
+0

당신은 내게는 도움이 있을까요? @AlexMamo – TiagoIB

+0

나는 2 가지 해결책을 주었다. 어느 것을 구현할 수 없습니까? –

+0

오늘의 방식. 최고는 무엇입니까[email protected] – TiagoIB