程序在Facebook Graph API响应之前进行 - 我怎样才能让它等待?

时间:2012-12-03 16:35:09

标签: android facebook facebook-graph-api user-permissions

以下是发生的事情:

  • 状态更改时,我的程序会更新
  • 状态更改的处理程序需要在继续之前知道用户的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
}

感谢任何/所有帮助。

2 个答案:

答案 0 :(得分:0)

在Request类而不是executeBatchAsync上使用一些..executeAndWait方法,而不是你的程序应该等待数据,之后它会继续......

看看这里:https://developers.facebook.com/docs/reference/android/3.0/Request

答案 1 :(得分:0)

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