Search code examples
androidlibgdxfacebook-android-sdk

Wait Facebook Callback result to return result


I'm Trying To Return the Result For My Login Method Using Facebook Api 4.5 But the Problem is when the result return Before Callback Method

My Code :

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

} The Console Log "Returning Result " BEFORE "onSuccess"

so i want to wait the LoginManager to finish executing before return the result


Solution

  • If you actually want to do this you can try this,

    But i think you should call a method if the login was successful and run that code, instead of checking if the condition is true and then run the code

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