2017-11-25 6 views
0

에서 모든 문서를 검색하지 :경우 FireStore 그래서 나는이 같은 모음이 모음

Rooms(collection) 
    -C1(document) 
    -D1(document) 
    -E1(document) 
    -F1(document) 

내가 여기있는 모든 문서를 얻고, 목록에 넣어하고자합니다.

내 코드를 지금까지 (RoomList 내가에서 onCreate에서 초기화 민간 전역 변수입니다) :

private void getRooms(){ 

    CollectionReference rooms = db.collection("Rooms"); 
    rooms.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
     @Override 
     public void onComplete(@NonNull Task<QuerySnapshot> task) { 
      if(task.isSuccessful()){ 
       for (DocumentSnapshot document : task.getResult()){ 
        Room r = new Room(); 
        r.setRoomNumber(document.getId()); 
        Map<String, Object> data = document.getData(); 
        r.setDescription(data.get("Description").toString()); 
        RoomList.add(r); 
       } 
      } 
     } 
    }) 

내가 디버거를 실행할 때마다, 그것은 완전히의 onComplete 방법을 통해 건너 뛰고 변화를하지 않습니다 RoomList.

답변

0

onComplete() 메서드가 비동기 호출되므로 Room 클래스의 해당 개체를 목록에 추가하려고하기 전에 호출된다는 의미이므로 항상 RoomList이 비어 있습니다. 이 문제를 해결하려면 onComplete 메소드 내에서 다음과 같이 목록 선언을 이동해야합니다.

private void getRooms(){ 
    CollectionReference rooms = db.collection("Rooms"); 
    rooms.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { 
     @Override 
     public void onComplete(@NonNull Task<QuerySnapshot> task) { 
      List<Room> list = new ArrayList<>(); 
      if(task.isSuccessful()){ 
       for (DocumentSnapshot document : task.getResult()){ 
        Room r = new Room(); 
        r.setRoomNumber(document.getId()); 
        Map<String, Object> data = document.getData(); 
        r.setDescription(data.get("Description").toString()); 
        RoomList.add(r); 
       } 
      } 
      Log("TAG", list); 
     } 
    }) 
} 
+0

그래도 여전히 작동하지 않습니다. 내가 리사이클 러 뷰를 사용하고 있는데 이것을 액티비티 또는 어댑터에 넣어야합니까? –

+0

활동에서. 오류가 있습니까? –

+0

아니요, 데이터 바인딩을 사용하여 다시 작성했습니다. –

관련 문제