Android和Facebook SDK 3.0.1函数getUserID

时间:2013-05-20 15:11:27

标签: android facebook facebook-android-sdk

我正在实施新的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)。 问题是接收信息的时间。我该如何控制它?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

实际上有一种解决方法。只需使用Request.executeAndWait()。该函数完全按照它的声音执行,它会暂停线程直到onComplete完成。