有点困惑......
我正在使用LoginButton类在我的应用程序中通过facebook登录。
我已经注册了一个回调loginButton.registerCallback,我可以用它成功登录,这一切都在我的应用程序的LoginActivity类中完成。
如下图所示,在回调的onSuccess方法中,我调用getFaceBookProfileDetails方法,在本地定义调用Graph API来获取用户详细信息,即名称,个人资料图片等,这也很有效。
onSuccess(LoginResult loginResult) {
getFaceBookProfileDetails(loginResult.getAccessToken());
startActivity(intentHomeActivity)
}
现在问题是我想把这个Facebook数据传递给我的HomeActivity,我会在UI上显示它。
由于图形API调用在非UI线程上运行Async,当我尝试在HomeActivity中获取此数据时,我得到Null指针。
为此寻找许多解决方案而没有运气。 任何帮助将不胜感激。
facebookButton = (LoginButton) findViewById(R.id.login_button);
facebookButton.setReadPermissions(Arrays.asList("public_profile",
"email", "user_birthday"));
intentHomeActivity = new Intent(this, HomeActivity.class);
facebookButton.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
getFaceBookProfileDetails(loginResult.getAccessToken());
startActivity(intentHomeActivity);
}
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
private void getFaceBookProfileDetails(final AccessToken accessToken) {
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
final JSONObject object,
GraphResponse response) {
try {
Toast.makeText(getApplicationContext(), "User Name
is --"+object.get("name"), Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), "User ID is
--"+object.get("id"), Toast.LENGTH_LONG).show();
ProfilePictureView profilePictureView = new
ProfilePictureView(getApplicationContext());
intentHomeActivity.putExtra(Constants.FACEBOOK_USER_OBJECT,
object.get("id").toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
答案 0 :(得分:0)
从Response.Redirect
方法移动此行:
onSuccess()
到 startActivity(intentHomeActivity);
方法。后:
onCompleted()
onComplete()方法如下所示:
intentHomeActivity.putExtra(Constants.FACEBOOK_USER_OBJECT, object.get("id").toString());