android - tutorial - loginButton.registerCallback no puede resolver el método
import com facebook login loginmanager (2)
Error: (36, 20) error: no se puede encontrar el método del símbolo registerCallback (CallbackManager,>)
Cuando llamé a este registerCallback desde mi Mainactivity a facebook sdk 4.0''s lib
. Aquí está mi clase
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);
}
}
}
loginButton
debe ser de tipo LoginButton
lugar de Button
.
No relacionado: no es necesario que registre la devolución de llamada en loginButton
y LoginManager.getInstance()
. El primero es para el flujo de loginButton
, el último si tiene su propio botón o loginButton
inicio de sesión. De hecho, no está claro en la documentación de Facebook, no es tu culpa.
Debe llamar a FacebookSdk.sdkInitialize(this.getApplicationContext())
antes de setContentView()
. Código de muestra:
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
setContentView(R.layout.activity_login);
callbackManager = CallbackManager.Factory.create();
loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button);
//etc..
También la documentación menciona usar loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
o LoginManager.getInstance().registerCallback (callbackManager, new FacebookCallback<LoginResult>()
, no ambos. Aquí hay un código de muestra completo :
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());
}
});
No te olvides de incluir en onActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}