GraphRequest(Android Facebook SDK)中缺少位置数据

时间:2016-08-30 14:38:32

标签: android facebook facebook-graph-api

尝试让我的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"
}

为什么请求的位置字段不在图表响应中?

1 个答案:

答案 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");