何が起こっているのか:
- 状態が変化すると、プログラムが更新されます
- 状態変更のハンドラーは、続行する前にユーザーの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
}
任意/すべての助けをいただければ幸いです。