Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

loginButton.registerCallback cannot resolve method

Error:(36, 20) error: cannot find symbol method registerCallback(CallbackManager,>)

When i called this registerCallback from my Mainactivity to facebook sdk 4.0's lib. Here is my class

  public class MainActivity extends Activity {
        TextView tv;
        Button loginButton;
        CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("Oncreate", "Now on On create");
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        tv =(TextView)findViewById(R.id.tv);

        loginButton = (LoginButton)findViewById(R.id.login_button);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
            }

            @Override
            public void onCancel() {
                // App code
            }

            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });

        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                    }

                    @Override
                    public void onCancel() {
                        // App code
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                    }
                });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

    }
}
like image 780
Arunkrishna Avatar asked Apr 06 '15 11:04

Arunkrishna


2 Answers

You must call FacebookSdk.sdkInitialize(this.getApplicationContext()) before setContentView(). sample code:

super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
setContentView(R.layout.activity_login);
callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button);
//etc..

Also the documentation mentions to either use loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() or LoginManager.getInstance().registerCallback (callbackManager, new FacebookCallback<LoginResult>() , not both of them. Here is a full sample code:

private LoginButton loginButton;
private CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    setContentView(R.layout.activity_login);
    callbackManager = CallbackManager.Factory.create();
    loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button);
    List<String> permissionNeeds = Arrays.asList("user_photos", "email", "user_birthday", "public_profile");
    loginButton.setReadPermissions(permissionNeeds);
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
    {
        @Override
        public void onSuccess(LoginResult loginResult)
        {
            System.out.println("onSuccess");
        }

        @Override
        public void onCancel()
        {
            System.out.println("onCancel");
        }

        @Override
        public void onError(FacebookException exception)
        {
            Log.v("LoginActivity", exception.getCause().toString());
        }
    });

Don't forget to include onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}
like image 96
Menelaos Kotsollaris Avatar answered Oct 19 '22 21:10

Menelaos Kotsollaris


loginButton must be of type LoginButton instead of Button.

Unrelated: You do not need to register the callback on both the loginButton and LoginManager.getInstance(). The former is for the loginButton flow, the latter if you have your own button or login trigger. In fact it's not clear on Facebook's documentation, not your fault.

like image 9
Jose L Ugia Avatar answered Oct 19 '22 23:10

Jose L Ugia