2014-06-06 8 views
1

의 콜백 기능 중 onCompleted()이 완료 될 때까지 기다리려고합니다. 그러나 RequestAsyncTaskget() 메서드는 항상이 경우에 반환됩니다. 따라서 내 프로그램의 추가 진술에서 문제가 발생합니다. println 출력은 항상 데이터베이스 쿼리 후 표시되며 null이 아닙니다. 이건 내 데이터베이스가 UID로 null에 대한 조회가 발생FB Android-SDK : 요청의 콜백이 완료 될 때까지 기다리는 방법

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) { 
      // show authendicated ui 
      Log.i(TAG, "Logged in..."); 
      try { 
       Request.newMeRequest(session, new Request.GraphUserCallback() { 

        // callback after Graph API response with user object 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) { 
          MyApplication.userId = user.getId(); 
          System.out.println("User id: " + MyApplication.userId); 
         } 

        } 
       }).executeAsync().get(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId); 

: 다음은 내 코드입니다. 이 문제를 어떻게 해결할 수 있습니까? 귀하의 요청 콜백 내부

boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId); 

:

답변

1

당신은 당신의 코드의이 부분을 넣어야

@Override 
public void onCompleted(GraphUser user, Response response) { 
    if (user != null) { 
     MyApplication.userId = user.getId(); 
     System.out.println("User id: " + MyApplication.userId); 

     boolean isNewUser = !MyApplication.dbConnection.isUidRegistered(MyApplication.userId); 
     // here you should continue your work 
    }  
} 
+0

좋아,이 상황에 작동하는. 고맙습니다. 그래서 콜백 처리기 외부의 요청 이후 요청에서 결과 데이터를 사용해서는 안된다는 것이 맞습니까? –

+0

그렇습니다. 비동기 호출과 결과 데이터가 언제 올지 알지 못하기 때문에 최선의 방법입니다. 내 대답을 올바른 방법으로 받아 들일 수 있습니다. –

+0

좋아요, 전화 한 후로 궁금합니다. 비동기 요청에 대한 get() 메소드. 방금 get() 메서드의 결과를 테스트했으며 예상 값을 포함하고 있습니다. 비동기 작업이 끝난 후에 oncompleted 메서드가 호출되는 것 같습니다. –