等待Facebook Callback结果返回结果

时间:2016-10-05 00:08:03

标签: android libgdx facebook-android-sdk

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

我的代码:

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;
}

} 控制台记录“返回结果”之前“onSuccess”

所以我想在返回结果之前等待LoginManager完成执行

1 个答案:

答案 0 :(得分:0)

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

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

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
            }
        });