等待 Facebook 回调结果到 return 结果

Wait Facebook Callback result to return result

我正在尝试 Return 使用 Facebook Api 4.5 我的登录方法的结果 但问题是当结果 return 在回调方法

之前

我的代码:

public class FacebookServiceImpl implements FacebookService {

   private AndroidLauncher androidLauncher;
   public CallbackManager callbackManager;

   private boolean loginSuccess;

   public FacebookServiceImpl(AndroidLauncher androidLauncher) {
      this.androidLauncher = androidLauncher;
   }

    public boolean login() {
      callbackManager = CallbackManager.Factory.create();

      List<String> permission = new ArrayList<>();
      CallbackManager cm;

      permission.add("user_photos");
      LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Gdx.app.log("onSuccess",loginSuccess+"");

                    loginSuccess = true;
                }

                @Override
                public void onCancel() {
                    Gdx.app.log("onCancel",loginSuccess+"");

                    loginSuccess = false;
                }

                @Override
                public void onError(FacebookException exception) {
                    Gdx.app.log("onError",loginSuccess+"");
                    loginSuccess = false;
                }
            });

    LoginManager.getInstance().logInWithReadPermissions(androidLauncher, permission);

    Gdx.app.log("Returning result",loginSuccess+"");
    return loginSuccess;
}

} 控制台日志 "Returning Result " BEFORE "onSuccess"

所以我想在 return 结果

之前等待 LoginManager 完成执行

如果你真的想这样做,你可以试试这个,

但我认为您应该在登录成功时调用一个方法并 运行 该代码,而不是检查条件是否为真然后 运行 代码

public boolean login(final MyListener myListener) {
    callbackManager = CallbackManager.Factory.create();

    List<String> permission = new ArrayList<>();
    CallbackManager cm;

    permission.add("user_photos");
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Gdx.app.log("onSuccess",loginSuccess.toString());

                    myListener.success(true);
                }

                @Override
                public void onCancel() {
                    Gdx.app.log("onCancel",loginSuccess.toString());

                    myListener.success(false);
                }

                @Override
                public void onError(FacebookException exception) {
                    Gdx.app.log("onError",loginSuccess.toString());
                    myListener.success(false);
                }
            });

    LoginManager.getInstance().logInWithReadPermissions(androidLauncher, permission);

    Gdx.app.log("Returning result",loginSuccess.toString());
}

interface MyListener{
    void success(boolean result);
}

...
login(new MyListener() {
            @Override
            public void success(boolean result) {
                //Some Stuff
            }
        });