0

这是正在发生的事情:

  • 当状态发生变化时我的程序会更新
  • 状态更改的处理程序需要知道用户的 ID 才能继续;它调用 findUserID()
  • findUserID() 从 Facebook Graph API 请求用户 ID
  • 如果找到该值,则状态更改的处理程序会在该值之前继续进行,因此行为不正确。
  • 几秒钟后,跟踪 (Log.d) 显示已找到用户 ID

如果我暂停然后恢复我的程序,则会注意到用户 ID,然后我的程序会正常运行;但是,这不应该需要做。如何让我的程序在继续之前等待 Facebook Graph API 的响应?

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

use some ..executeAndWait method on Request class instead of executeBatchAsync, than your program should wait for data and after that it will proceed...

take a look here: https://developers.facebook.com/docs/reference/android/3.0/Request

于 2012-12-03T16:41:41.753 回答
0

onCompleted 方法中的代码是一个“回调”。当 Facebook 请求完成时,它会被异步调用。到那时,原始函数 findUserID 将已经返回。使用回调需要一些时间来适应,并且需要您相应地组织控制流。您应该创建一个“onUserIdFound”函数并在找到用户ID 时调用它,而不是从函数返回值。

于 2012-12-03T16:44:23.383 回答