我正在实施新的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)。 问题是接收信息的时间。我该如何控制它?
答案 0 :(得分:0)
我认为你无法控制它。
您正在执行异步请求,该请求是“允许在传输完成之前继续其他处理的请求。”(请参阅Wikipedia page)。
您必须等到请求对象调用onCompleted
方法。
答案 1 :(得分:0)
实际上有一种解决方法。只需使用Request.executeAndWait()。该函数完全按照它的声音执行,它会暂停线程直到onComplete完成。