Android 无法从GraphRequest Facebook获取值
我正在使用Facebook SDK 4.16.1通过使用Android 无法从GraphRequest Facebook获取值,android,facebook,login,Android,Facebook,Login,我正在使用Facebook SDK 4.16.1通过使用Profile我可以得到名字,姓氏,名字和id我的代码是这样的 public class LoginActivity extends Activity { String id, fname, lname, email, name, gender, locale, verified; private CallbackManager callbackManager; private AccessTokenTracker accessToken
Profile
我可以得到名字
,姓氏
,名字
和id
我的代码是这样的
public class LoginActivity extends Activity {
String id, fname, lname, email, name, gender, locale, verified;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginactivity);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
}
};
LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(Constants.FACEBOOK_PERMISSIONS));
FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = loginResult.getAccessToken();
Profile profile = Profile.getCurrentProfile();
FB_TOKEN=loginResult.getAccessToken().getToken();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
response.getError();
Log.e("JSON:", object.toString());
try {
email = object.getString("email");
gender = object.getString("gender");
locale = object.optString("locale");
verified = object.optString("verified");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,birthday,first_name,last_name,email,gender,verified,locale");
request.setParameters(parameters);
request.executeAsync();
id = profile.getId();
fname = profile.getFirstName();
lname = profile.getLastName();
name = profile.getName();
nextActivity(profile);
Toast.makeText(getApplicationContext(), "Logging in...", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
};
loginButton.registerCallback(callbackManager, callback);
}
}
public static final String[] FACEBOOK_PERMISSIONS = new String[] {
"public_profile",
"user_friends",
"email" };
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
response.getError();
Log.e("JSON-RESULT:", object.toString());
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(object.toString());
email = jsonObject.getString("email");
gender = jsonObject.getString("gender");
locale = jsonObject.getString("locale");
verified = jsonObject.getString("verified");
Log.e(TAG, email + " This is the email");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,birthday,first_name,last_name,email,gender,verified,locale");
request.setParameters(parameters);
request.executeAsync();
我正在尝试获取电子邮件、性别、地区以及是否已经验证。我将如何获得其他信息?除了通过Profile
更新
我像这样更新我的GraphRequest
public class LoginActivity extends Activity {
String id, fname, lname, email, name, gender, locale, verified;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loginactivity);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
}
};
LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList(Constants.FACEBOOK_PERMISSIONS));
FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = loginResult.getAccessToken();
Profile profile = Profile.getCurrentProfile();
FB_TOKEN=loginResult.getAccessToken().getToken();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
response.getError();
Log.e("JSON:", object.toString());
try {
email = object.getString("email");
gender = object.getString("gender");
locale = object.optString("locale");
verified = object.optString("verified");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,birthday,first_name,last_name,email,gender,verified,locale");
request.setParameters(parameters);
request.executeAsync();
id = profile.getId();
fname = profile.getFirstName();
lname = profile.getLastName();
name = profile.getName();
nextActivity(profile);
Toast.makeText(getApplicationContext(), "Logging in...", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
};
loginButton.registerCallback(callbackManager, callback);
}
}
public static final String[] FACEBOOK_PERMISSIONS = new String[] {
"public_profile",
"user_friends",
"email" };
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
response.getError();
Log.e("JSON-RESULT:", object.toString());
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(object.toString());
email = jsonObject.getString("email");
gender = jsonObject.getString("gender");
locale = jsonObject.getString("locale");
verified = jsonObject.getString("verified");
Log.e(TAG, email + " This is the email");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,birthday,first_name,last_name,email,gender,verified,locale");
request.setParameters(parameters);
request.executeAsync();
在我的
Logcat
中,它显示我正确设置了电子邮件和其他邮件,但当你设置断点时,它没有进入GraphRequest
,因此我的全局变量
电子邮件仍然为空。即使在Log.e(“JSON:,object.toString())代码>和Log.e(标签,电子邮件+“这就是电子邮件”)代码>它显示我获取并设置值。我想知道如何获取Bundle
的值?尝试使用下面的代码获取其他信息
private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// Log.d("Login", "onSuccess");
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject me, GraphResponse response) {
if (response.getError() != null) {
// handle error
} else {
email = me.optString("email");
String id = me.optString("id");
String email=me.optString("email");
String name= me.optString("name");
String gender= me.optString("gender");
String verified= me.optBoolean("is_verified") + "";
}
}
}).executeAsync();
}
@Override
public void onCancel () {
// Log.d("Login", "onCancel");
}
@Override
public void onError (FacebookException e){
// Log.d("Login", "onError " + e);
}
};
private FacebookCallback mFacebookCallback=new FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
//Log.d(“登录”、“成功”);
格拉夫勒奎斯特(
loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共无效(JSONObject me,GraphResponse响应){
if(response.getError()!=null){
//处理错误
}否则{
email=me.optString(“email”);
字符串id=me.optString(“id”);
字符串email=me.optString(“email”);
字符串名称=me.optString(“名称”);
字符串gender=me.optString(“gender”);
已验证字符串=me.optBoolean(“已验证”)+“”;
}
}
}).executeAsync();
}
@凌驾
取消后的公共无效(){
//Log.d(“登录”、“取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
//Log.d(“登录”、“onError”+e);
}
};
你看到了吗?所以我将在fb sdk 4.1中的onCreate
中调用mFacebookCallback
?如果你检查了官方文档,请注册回拨并在onCreateView中调用我看到了,我错过了这一部分,我应该把它全部放在一个片段中,我现在就编辑它,因为我把它都放在了我的活动中。没有问题,你可以尝试一下,如果需要任何帮助,你可以问我。。如果它帮助你,那么请接受并投票,这样别人也可以认为这是正确答案。