2016-11-20 2 views
0

나는 Firebase를 사용하고 있습니다. 내 문제는, 내가 개체를 쿼리하고 그들을 수정하는 동안 내 메인 UI 스레드 앞서 가서 다음 방법을 실행합니다. 내 firebase 쿼리가 끝날 때까지 기다릴 내 주 UI 스레드를 원하는 및 onDataChange 모든 필요한 변경된 및 그때 내 다른 함수를 계속 실행합니다.쿼리가 완료 될 때 메서드를 실행하는 방법?

현재 외부 라이브러리 "Otto"를 가져 왔지만 사용 방법을 잘 모르겠지만 누군가 나를 안내 할 수 있기를 바랍니다.

   Firebase cardReference = mRef.child("reference"); 
       cardReference.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
        //DO STUFF 
        } 
        @Override 
        public void onCancelled(FirebaseError firebaseError) { 

        } 
       }); 
       //Once STUFF is done, run nextMethod() 
       nextMethod(); 
     } 
+0

왜이 물건을 편집 한 후'onDataChange'에서''nextMethod()를 사용하지 말아'Otto'입니다 : 일부 자세한 내용은

는 이러한 읽기? pub-sub로 작동합니다. – adnbsr

답변

0

Firebase는 데이터베이스의 데이터를 비동기 적으로 읽습니다. "응용 프로그램이 응답하지 않음"을 사용자에게 표시하지 않고 앱을 대기 상태로 만들 수있는 방법은 없습니다.

대신 논리를 다시 프레임해야합니다. "먼저 참조를로드 한 후 다음 메소드를 수행하십시오"라고 말하고 "참조로드가 시작되면 다음 메소드 수행"으로 변경하십시오. 로 변환 코드 :

Firebase cardReference = mRef.child("reference"); 
cardReference.addValueEventListener(new ValueEventListener() { 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     // Whenever STUFF is done, run nextMethod() 
     nextMethod(); 
    } 
    public void onCancelled(FirebaseError firebaseError) { 
     throw firebaseError.toException(); 
    } 
}); 

은이 방법의 장점을 추가 nextMethod() 이제도 때마다 상기 기준 데이터 변경을 호출한다는 것이다. 이러한 경우에 UI를 업데이트하는 것은 사용자가 알게되면 사용자가 느끼게 될 특수 효과 중 하나입니다.

관련 문제