0

何が起こっているのか:

  • 状態が変化すると、プログラムが更新されます
  • 状態変更のハンドラーは、続行する前にユーザーのIDを知っている必要があります。findUserID()を呼び出します
  • findUserID()は、FacebookGraphAPIからユーザーのIDを要求します
  • 状態変更のハンドラーは、見つかった場合はその値の前に進み、そのために正しく動作しません。
  • 数秒後、トレース(Log.d)は、ユーザーのIDが見つかったことを示します。

プログラムを一時停止してから再開すると、ユーザーIDが通知され、プログラムは正しく動作します。ただし、これを行う必要はありません。プログラムを続行する前にFacebookGraphAPIの応答を待機させるにはどうすればよいですか?

protected void findUserID(Session session) 
{   
    //userId = null; // Set initial

    // If session is open
    if (session != null && session.isOpened()) {    

        //  Make an API call to get user data
        // and define a new callback to handle the response
        Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
            @Override
            public void onCompleted(GraphUser user, Response response) {

                Session session = Session.getActiveSession();

                // If current session matches active session
                if (session == Session.getActiveSession()) {
                    if (user != null) {

                        userId = user.getId(); // set userId
                        Log.d("internal", "UserId issss: " + userId);
                    } // end if user != null   
                }   // end if session == Session.getActiveSession()                 
            } // end onCompleted
        }); // end request
        Request.executeBatchAsync(request); // Request does not execute unless you call this.
        Log.d("findUserID", "The value after request: " + userId);
    } // end session open check
}

任意/すべての助けをいただければ幸いです。

4

2 に答える 2

0

executeBatchAsyncの代わりにRequestクラスで..executeAndWaitメソッドを使用してください。プログラムはデータを待機し、その後続行します...

こちらをご覧ください:https ://developers.facebook.com/docs/reference/android/3.0/Request

于 2012-12-03T16:41:41.753 に答える
0

onCompletedメソッド内のコードは「コールバック」です。Facebookリクエストが完了すると、非同期で呼び出されます。元の関数findUserIDは、その時点ですでに返されています。コールバックを使用するにはある程度の慣れが必要であり、それに応じて制御フローを整理する必要があります。関数から値を返す代わりに、「onUserIdFound」関数を作成し、userIDが見つかったときにそれを呼び出す必要があります。

于 2012-12-03T16:44:23.383 に答える