如何从android中的facebook API获取所有朋友的姓名,身份证,生日,位置等。

时间:2011-01-10 10:09:20

标签: android facebook

  

可能重复:
  How to get friend's birthday list using facebook api?

我想在android应用程序中显示包含姓名,身份证,生日,位置等信息的列表。

虽然下面的代码我得到了朋友的姓名和身份证,但我在工作中取得了成功。

           Bundle parameters = new Bundle();
    mAccessToken = facebook.getAccessToken();

    try {

        parameters.putString("format", "json");
        parameters.putString(TOKEN, mAccessToken);

        String url = "https://graph.facebook.com/me/friends";
        String response = Util.openUrl(url, "GET", parameters);
        JSONObject obj = Util.parseJson(response);

        Log.i("json Response", obj.toString());
        JSONArray array = obj.optJSONArray("data");

        if (array != null) {
            for (int i = 0; i < array.length(); i++) {
                String name = array.getJSONObject(i).getString("name");

                String id = array.getJSONObject(i).getString("id");

                Log.i(name,id);
            }
        } 

                ............
                ............

但不能在json响应中获取生日,位置等字段。 什么是错误?

5 个答案:

答案 0 :(得分:9)

使用FQL语言快速获取所需的所有信息:

$this->api->api(array('method'=>'fql.query','query'=>"SELECT uid,name,first_name,middle_name,last_name,pic_square,hometown_location,current_location,profile_url,email,website FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"));

有关具有相应列名的所有表的列表,请参阅:Facebook FQL Reference

答案 1 :(得分:6)

当我想获得我的朋友列表,并过滤他们的名字和网站时,这对我有用:https://graph.facebook.com/me/friends?fields=name,website&access_token=someCrazyLongRandomlyGeneratedString

似乎你应该这样做,你只需要将'name,website'替换为'name,id,birthday,location'或者你想要从响应中包含的字段列表中获得的任何内容。用户对象:http://developers.facebook.com/docs/reference/api/user/。我相信id会自动包含在响应中,因此您不必将其实际包含在请求中。

答案 2 :(得分:5)

Facebook API says FriendList每个朋友只包含idname

我没有使用Facebook API,但我然后你需要为每个用户查询https://graph.facebook.com/[id],根据需要插入他们的id,以返回所有可用的信息,然后分别解析每个用户的JSON响应(their docs并不是特别清楚)。

答案 3 :(得分:1)

使用此FQL调用可以检索用户朋友的姓名,ID,生日和位置:

SELECT uid,name, birthday_date, hometown_location 
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 

在Android上,使用Facebook Android SDK,可以实现:

String query = "SELECT uid,name,birthday_date, hometown_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) (SELECT uid2 FROM friend WHERE uid1=me())"
Bundle params = new Bundle();
params.putString("method", "fql.query");
params.putString("query", query);
mAsyncFacebookRunner.request(null, params, new FQLRequestListener())

其中FQLRequestListener扩展了RequestListener。

您需要这些权限:

friends_birthday
friends_hometown

答案 4 :(得分:0)

您已经接近它,请在网址中使用此项,请确保您拥有friends_birthday和friends_location的权限

String url = "https://graph.facebook.com/me/friends?fields=id,name,birthday,location";