【发布时间】:2016-03-08 22:50:31
【问题描述】:
当要求用户通过 Facebook 登录登录我的应用程序时,我想检索他们的电子邮件和姓名,以便他们为我们的应用程序创建一个自定义帐户。但是,在要求他们通过 Facebook 登录并授权我们的应用获取用户名和电子邮件后,应用不会转换到注册片段并将信息输入到电子邮件和姓名字段中。
在 LoginFragment 中,我有这段代码专门用于检索用户的电子邮件和姓名。
mFaceLogin = (LoginButton) v.findViewById(R.id.login_button);
mFaceLogin.setReadPermissions(Arrays.asList("email", "public_profile"));
mFaceLogin.setFragment(this);
mFaceLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
final AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject user, GraphResponse graphResponse) {
if (graphResponse.getError() == null) {
((MyRegisterListener) getActivity()).myStartRegisterFacebook(user.optString("first_name"), user.optString("email"));
}
}
});
}
@Override
public void onCancel() {
Toast.makeText(getActivity(), "fail", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getActivity(), "error", Toast.LENGTH_SHORT).show();
}
});
myStartRegisterFacebook 方法假设调用 Activity 以切换到 RegisterFragment 并将名称和电子邮件发送到 RegisterFragment 的 xml 布局中显示的 EditText 字段。
登录活动
@Override
public void myStartRegisterFacebook(String name, String email) {
RegisterFragment registerFragment = new RegisterFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.lr_container,
new RegisterFragment()).addToBackStack(null).commit();
registerFragment.updateInformation(name, email);
}
注册片段
public void updateInformation(String name, String email) {
mFname.setText(name);
mEmail.setText(email);
}
【问题讨论】: