我已经能够成功实现Facebook登录按钮。我现在唯一的问题是我无法检查用户是否已经登录。
这是用户单击登录按钮时的代码:
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
getFacebookData(object);
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "name, email, picture");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
getFacebookData
包含以下代码:
private void getFacebookData(JSONObject object) {
try {
Intent intent = new Intent(MainActivity.this, Profile.class);
String fb_name = object.getString("name");
String fb_email = object.getString("email");
URL profile_picture = new URL("http://graph.facebook.com/" + object.getString("id") + "/picture?type=large");
intent.putExtra("name", fb_name);
intent.putExtra("email", fb_email);
intent.putExtra("profile_picture", profile_picture.toString());
intent.putExtra("userOption", 2);
startActivityForResult(intent, 1);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
基本上,当用户成功登录后,它会将用户的姓名,电子邮件和个人资料图片数据发送到Profile
活动中。
现在,我在onCreate
类中的MainActivity
方法中拥有的是:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {
}
上面的代码检查用户是否已经使用其Facebook帐户登录。我要放在if语句中的内容是getFacebookData()
,因为这会将数据发送到Profile
活动并立即开始Profile
活动,而不是转到MainActivity
。我的问题是,我必须传递JSONObject
。
我不知道要传递给JSONObject
函数的getFacebookData()
是什么,应该怎么解决?
答案 0 :(得分:0)
首先,您可以在应用程序中永久存储用户名,电子邮件和ID(例如,共享首选项)。
要插入:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("fbId", fbId);
editor.putString("fbEmail", fbEmail);
editor.putString("fbName", fbName);
editor.commit();
要检索:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String fbId= sharedPref.getString("fbId");
String fbEmail = sharedPref.getString("fbEmail");
String fbName= sharedPref.getString("fbName");
如果您真的想再次请求,可以使用以下方法:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
getFacebookData(object);
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "name, email, picture");
request.setParameters(parameters);
request.executeAsync();
}