我正在使用以下代码通过我的Android应用程序获取Facebook用户详细信息。
callbackManager = CallbackManager.Factory.create();
fb = (Button) findViewById(R.id.fb);
loginButton = (LoginButton) findViewById(R.id.login_button);
List < String > permissionNeeds = Arrays.asList("user_photos", "email",
"user_birthday", "public_profile", "AccessToken");
loginButton.registerCallback(callbackManager,
new FacebookCallback < LoginResult > () {@Override
public void onSuccess(LoginResult loginResult) {
System.out.println("onSuccess");
String accessToken = loginResult.getAccessToken()
.getToken();
Log.i("accessToken", accessToken);
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {@Override
public void onCompleted(JSONObject object,
GraphResponse response) {
Log.i("LoginActivity",
response.toString());
try {
id = object.getString("id");
try {
Log.i("profile_pic",
profile_pic + "");
} catch (MalformedURLException e) {
e.printStackTrace();
}
name = object.getString("name");
email = object.getString("email");
gender = object.getString("gender");
birthday = object.getString("birthday");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields",
"id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
System.out.println("onCancel");
}
@Override
public void onError(FacebookException exception) {
System.out.println("onError");
Log.v("LoginActivity", exception.getCause().toString());
}
});
@Override
protected void onActivityResult
(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
Log.i("onActivityResult", "onActivityResult");
}
此处打印onActivityResult内的日志,而loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
完全没有启动。此方法中的所有日志均未打印。
有什么问题?
答案 0 :(得分:3)
我通过放置
解决了这个问题callbackManager = CallbackManager.Factory.create();
在setContentView();
之上答案 1 :(得分:1)
检查您是否初始化了Fb SDK,如果不使用它。 创建一个从Application扩展的类,然后您必须在Android Manifiest中注册为Name。
public class App extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
FacebookSdk.sdkInitialize(getApplicationContext());
}
public static Context getContext() {
return context;
}
}
Manifiest。
<application
android:name=".App"
.....
.....
.....
答案 2 :(得分:0)
您需要使用LoginManager.getInstance()
进行回调,而不是对按钮进行回调,而是回调您要进行回调的页面。由于LoginManager.getInstance()
是登录管理器的getter并返回登录管理器。
简而言之,只需应用代码:
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback<LoginResult>(){
而不是
loginButton.registerCallback(callbackManager,new FacebookCallback<LoginResult>(){