Android工作室Facebook - 如何获得完整的朋友列表

时间:2015-08-04 13:02:11

标签: android facebook facebook-graph-api

如何使用Android Studio和Facebook SDK 4.4获取一个人的完整好友列表。+。我到处寻找教程,但它们都过时了。我只需要一个简单的代码而无需安装任何新库,我需要更多解释代码

3 个答案:

答案 0 :(得分:1)

直接来自Facebook API文档 - https://developers.facebook.com/docs/graph-api/reference/v2.4/user/friends

  

这只会返回任何使用(通过Facebook登录)应用程序的朋友发出请求。   如果该人的朋友拒绝了user_friends权限,该朋友将不会出现在此人的朋友列表中。

这是Facebook API在我们对所有应用强制执行v2时对我们所做的事情。

感谢Facebook。

答案 1 :(得分:0)

这听起来像你吗?那么你找到了正确的问题! 你需要做什么才能实现"朋友获得"是Facebook Graph API。 Facebook对如何使用他们的Graph API +有很好的解释,你可以使用他们的Graph Explorer来测试它。

但您可能需要更多帮助吗?好吧,我可以把它给你。

首先正确整合您的Facebook SDK并添加登录按钮,以便此人可以登录。 从现在开始是Graph API。我建议您在阅读本答案后阅读Graph API文档和权限列表,以便更好地理解这个神奇的工具。

很多人说,经过一段时间的更新后,你无法得到一个完整的朋友列表。那么他们是部分正确的。 Facebook确实改变了某些命令的行为方式,但其他命令仍在您的位置上。例如/ taggable_friends

可标记的朋友会给你一系列名字,这些名字都是你的朋友,他们没有把他们的个人资料私有化。例如,我有409个朋友,但是此功能仅向我显示406人,因为3个人拥有私人帐户。

如何使用taggable_friends? 在登录代码中添加:

 GraphRequest requestet =
                new GraphRequest(
                        accessToken,
                        "/me/friends",
                        null,
                        HttpMethod.GET,
                        new GraphRequest.Callback() {
                            public void onCompleted(GraphResponse response) {
                                JSONObject obj = response.getJSONObject();
                                JSONObject sum;
                                try {
                                    sum = obj.getJSONObject("summary");
                                    c=Integer.valueOf(sum.optString("total_count"));
                                    fff.setText(sum.optString("total_count"));
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                        }
                );
        GraphRequest requestt =
        new GraphRequest(
                accessToken,
                "/me/taggable_friends",
                null,
                HttpMethod.GET,
                new GraphRequest.Callback() {
                    public void onCompleted(GraphResponse response) {
                        JSONObject obj = response.getJSONObject();
                        JSONArray arr;
                        try {
                            arr = obj.getJSONArray("data");
                            JSONObject oneByOne = arr.getJSONObject(1);

                            lmaYOLO.setText(Integer.toString(c)+" "+oneByOne.opt("name").toString());
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }
        );

        Bundle parameters = new Bundle();
        parameters.putString("fields", "name");
        requestet.executeAsync();
        request.setParameters(parameters);
        request.executeAsync();
        requestt.setParameters(parameters);
        requestt.executeAsync();

我们使用的第一个图形请求是" requestet"我在那里做的是使用朋友节点获取登录用户的朋友数量。

为了访问任何节点,您需要使用JSONObject objname = previousobject.getJSONObject("节点名称") 使用objname,previousobject和节点名称可根据需要进行更改。

使用taggable_friends会更加棘手,因为你会得到一个对象数组,每个对象都包含一个朋友的名字。所以你可以在代码中看到我如何获得与Object相同的Array。现在在JSONObject oneByOne = arr.getJSONObject(1),一个可以转换为任意数量的朋友列表(REMEMBER数组从0开始,所以第一个元素将是getJSONObject(0))。

现在从这里你可以创建一个while循环,它将从0变为我们从/ me / friends获得的数字

您可能已经注意到,当我使用setText时,我使用oneByOne.opt(" name")。选项的作用是获取该节点的值(在我们的例子中是朋友的名字),而不像打开节点的getJSONObject。

启动此程序,我将在屏幕上看到:

406 - 非私人朋友的数量 Biggus Dickus - 我的Facebook列表中的第二个朋友(当然不是你真实的第二个朋友)。

Changin它给我我的第一个朋友(记住你必须把0), 我会得到 407(哦,我接受了新朋友的要求) 马丁路德金

从这里开始,您可以使用此代码执行任何操作!有基金

答案 2 :(得分:0)

无法获取整个朋友列表。只有那些也在使用你的应用程序。

请参阅: