0

我正在实施新的 Facebook SDK 3.0.1,我对与 Session 一起使用有一些疑问。

我创建了一个函数来仅查询用户 ID:

    String userID;
    public String getUserID(){
        final Session session = Session.getActiveSession();
        if (session != null && session.isOpened()) {
            Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (session == Session.getActiveSession()) {
                        if (user != null) {
                            userID = user.getId();
                            System.out.println("User ID " + userID); //OK
                        }   
                    }   
                }
            }); 
            Request.executeBatchAsync(request);
            return userID;
        }else{
            return null;
        }

    }

问题是当我这样做时,System.out.println("ID is... "+FB.getUserID());因为只显示:“ID 是......”。

但是内部println完美显示了id(用户ID XXXXXXXXX)。问题是接收信息的时间。我该如何控制它?

4

2 回答 2

0

我认为你无法控制它。您正在执行一个异步请求,该请求是“允许其他处理在传输完成之前继续进行”的请求。(参见维基百科页面)。
您必须等到onCompleted请求对象调用该方法。

于 2013-05-21T13:12:21.787 回答
0

实际上有一种方法可以解决这个问题。只需使用 Request.executeAndWait()。该函数完全按照听起来的方式执行,它暂停线程直到 onComplete 完成。

于 2013-08-28T18:07:51.947 回答