문제
첫 번째 Firebase 호출이있는 메인 코드 :
refFB.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
FirebaseReq fbReq = snapshot.getValue(FirebaseReq.class);
service(fbReq);
}
...
});
.
maintanance 및 가독성은 나에게 훨씬 더 명확합니다.
Run service(fbReq) in new thread.
public void service(FirebaseReq firebaseReq) {
value = dao(firebaseReq);
/*some other code which use value*/
}
public String dao(FirebaseReq firebaseReq) {
String result = null;
//the second firebase call
childRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
result = snapshot.getName();
}
...
});
while (result== null){
}
return result;
}
.
또는 스레드 및 대기 루프를 피하는 것이 좋습니다. 그러나 읽을 수 없음 코드 :
public void service(FirebaseReq firebaseReq) {
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
/*some other code which use value*/
}
...
});
dao(firebaseReq,valueEventListener);
}
public String dao(FirebaseReq firebaseReq,ValueEventListener valueEventListener) {
//the second firebase call
childRef.addListenerForSingleValueEvent(valueEventListener);
}
.
답장을 보내 주셔서 감사합니다
해결책
비동기 콜백은 거의 항상 기다리는 것이 좋습니다.특히 사용 중일 때 바쁜 기다림.
실제로 콜백 코드 클리너를 찾습니다.
제휴하지 않습니다 StackOverflow