当我运行我的Android应用程序,然后单击批准给予权限时,它不会被重定向到MainActivity。 “登录”消息未显示在Catlog中。我已阅读Facebook开发人员指南,并将我的代码与Stack的不同主题进行了比较。我看不出我做错了什么。
我很乐意帮忙。
public class Login extends Activity {
/**
* Called when the activity is first created.
*/
private CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_login);
final CallbackManager callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("public_profile", "email", "user_friends");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);
System.out.print("Logged in");
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
Log.i("Error" , "Error");
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
栈跟踪
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {org.MYapp.FBtestApp/org.MYapp.FBtestApp.Login}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:3974)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4017)
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean com.facebook.CallbackManager.onActivityResult(int, int, android.content.Intent)' on a null object reference
at org.MYapp.FBtestApp.Login.onActivityResult(Login.java:98)
答案 0 :(得分:5)
要使登录正常工作,您必须从onActivityResult()
anomymous类中删除FacebookCallback
方法。
正确的代码应如下所示:
private CallbackManager callbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("public_profile", "email", "user_friends");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Intent i = new Intent(Login.this, MainActivity.class);
startActivity(i);
System.out.print("Logged in");
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
Log.i("Error" , "Error");
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
答案 1 :(得分:2)
首先,插入私人private CallbackManager callbackManager;
进入你的代码。看起来应该是这样的:
callbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
然后添加FacebookSdk.sdkInitialize(getApplicationContext());
之前super.onCreate(savedInstanceState);
试试这个希望这是有效的
答案 2 :(得分:0)
以下对我有用:
补充:
FacebookSdk.sdkInitialize(getApplicationContext());
在:
super.onCreate(savedInstanceState);
奇怪的是,因为一切都工作得很好;但突然间,我遇到了这个问题。现在,它已通过上述解决方案得到修复。