【问题标题】:Program proceeds before Facebook Graph API responds -- How can I make it wait?程序在 Facebook Graph API 响应之前进行——我怎样才能让它等待?
【发布时间】:2012-11-21 04:16:53
【问题描述】:

这是发生了什么:

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

感谢任何/所有帮助。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • Sigh 不幸的是,你所说的很有道理。我希望能更快地解决问题,但是.. 乞丐不能挑剔。
    【解决方案2】:

    在 Request 类上使用一些 ..executeAndWait 方法而不是 executeBatchAsync,这样您的程序应该等待数据,然后它将继续...

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

    【讨论】:

    • Hmm.. 该方法的文档以及任何其他使用“等待”的方法都建议在 UI 线程之外使用它。 Annndd.. 他们都在向我抛出运行时错误,哈哈。
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多