尝试让我的Android应用程序获取已登录的Facebook用户的电子邮件,生日和位置。前两个字段可以成功检索,但Graph API的响应中缺少位置,我无法弄清楚原因。
我正在使用这些权限登录:
LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile", "user_friends", "email", "user_birthday", "user_location"));
GraphRequest实现如下:
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
Log.d("jsonTest171", object.toString(4));
String email = object.getString("email");
UserData.emailAddress = email;
String birthday = object.getString("birthday");
UserData.birthday = birthday;
String location = object.getJSONObject("location").getString("name");
UserData.location = location;
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,email,location,birthday");
request.setParameters(parameters);
request.executeAsync();
Facebook用户将应用设置为允许所有3个请求的字段as shown here。
这是上面代码中包含的调试行的LogCat输出:
{
"id": "101936745620608",
"email": "test77124@gmail.com",
"birthday": "12\/20\/1983"
}
为什么请求的位置字段不在图表响应中?
答案 0 :(得分:3)
代替location
在Bundle参数中询问location{location}
,如:
parameters.putString("fields", "id,email,birthday,location{location}");
响应的位置部分如下:
"location":{
"location":{
"city":"",
"country":"",
"latitude":0,
"longitude":0
},
"id":""
}
所以你可以在你的回调方法中检索它们,如:
JSONObject location = object.getJSONObject("location").getJSONObject("location");
String city = location.getString("city");
String country = location.getString("country");