Java RestFb无法从动作侦听器获取返回值

时间:2018-03-01 19:13:29

标签: java facebook restfb

我正在尝试使用restfb api从Facebook获取访问令牌一切正常,我可以打印访问令牌,但当我尝试返回它时,我得到一个空值.. 以下是代码

public String showLogin() {
DefaultFacebookClient facebookClient = new DefaultFacebookClient(Version.LATEST);
ScopeBuilder scopes = new ScopeBuilder();
String loadUrl = facebookClient.getLoginDialogUrl(appId, SUCCESS_URL, scopes);
webEngine.load(loadUrl + "&display=popup&response_type=code");
webEngine.getLoadWorker().stateProperty().addListener(
  (ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) -> {
    if (newValue != Worker.State.SUCCEEDED) {
      return;
    }

    String myUrl = webEngine.getLocation();

    if ("https://www.facebook.com/dialog/close".equals(myUrl)) {
      System.out.println("dialog closed");
      System.exit(0);
    }
    String u="https://www.creativecorner7.com/";
    if (myUrl.startsWith(u)) {
      int pos = myUrl.indexOf("code=");
      code = myUrl.substring(pos + "code=".length());
      FacebookClient.AccessToken token = facebookClient.obtainUserAccessToken(appId,
              appSecret, SUCCESS_URL, code);
      acctoken=token.getAccessToken();
        System.out.println(acctoken);
    }

  });
 return acctoken;}

2 个答案:

答案 0 :(得分:0)

Web引擎异步工作,因此在 acctoken方法完成之前,Webengine#load将返回。你必须考虑另一种方法。

答案 1 :(得分:0)

通过使用acctoken的getter和setter,我能够解决这个问题。