如何使用Android Facebook SDK获取完整的好友列表

如何使用Android Facebook SDK获取完整的好友列表,android,facebook-graph-api,android-facebook,Android,Facebook Graph Api,Android Facebook,我正在尝试使用Facebook Android SDK 3.23.0获取所有好友的列表 我只得到前20个结果,当我试图转到下一页时,我只得到一个空结果 代码如下: Request.GraphUserListCallback callback = new Request.GraphUserListCallback() { @Override public void onCompleted(List<GraphUser> graphUsers, R

我正在尝试使用Facebook Android SDK 3.23.0获取所有好友的列表

我只得到前20个结果,当我试图转到下一页时,我只得到一个空结果

代码如下:

    Request.GraphUserListCallback callback = new Request.GraphUserListCallback() {
        @Override
        public void onCompleted(List<GraphUser> graphUsers, Response response) {
            parseFriends(graphUsers);
        }
    };

    Bundle params = new Bundle();
    params.putString("fields", "id, name");
    Request request = Request.newMyFriendsRequest(mSession, callback);

    while (request != null) {
        request.setParameters(params);

        Response response = request.executeAndWait();

        if (response.getError() != null) {
            Log.e(TAG, "Error in request: " + response.getError().toString());
            break;
        } else {
            request = response.getRequestForPagedResults(Response.PagingDirection.NEXT);
        }
    }
Request.GraphUserListCallback callback=new Request.GraphUserListCallback(){
@凌驾
未完成公共无效(列表图形处理程序、响应){
我的朋友(葡萄采摘者);
}
};
Bundle params=新Bundle();
参数putString(“字段”、“id、名称”);
Request-Request=Request.newMyFriendsRequest(mSession,callback);
while(请求!=null){
请求。设置参数(参数);
Response=request.executeAndWait();
if(response.getError()!=null){
Log.e(标记“请求中的错误:”+response.getError().toString());
打破
}否则{
请求=response.getRequestForPagedResults(response.PagingDirection.NEXT);
}
}
如果不起作用,第二个请求(由
getRequestForPagedResults()
创建的请求)基本上是空的(图形路径为“null”)

当我查看第一个请求的响应时,“next”标记似乎非常好:

https://graph.facebook.com/v2.2/625641456/friends?fields=id,name&format=json&access\u-token=[token]&limit=25&offset=25&\u-after\u-id=[id]

(当第一个请求只返回20个结果时,我确实想知道为什么偏移量是25。我使用的是默认限制,我认为是25)

我的备份计划是跟踪我处理的元素数量,并简单地将“偏移量”添加到我传入的包中。但这会导致第二个请求为空,其“next”为空

因此,我尝试解析第一个请求产生的“next”字符串,并将其所有内容传递到bundle中,即在id、offset、limit等之后传递。。。但结果是一样的——结果为空,没有“下一步”


如何正确检索完整的好友列表?

尝试将限制从25设置为无限制(或非常大的限制),并让代码的其余部分保持原样。我在旧版本中使用SDK,它有时以特殊的方式工作(但我倾向于记住,我得到的是完整的朋友列表,不管它的大小)


另外,尝试将request.setParams()移到while之外。如果请求有任何临时状态,您只需覆盖它们。Facebook可能会拒绝一个接一个的相同请求,这些请求太快,无法抵御DoS攻击。

简单回答:这是不可能的。Facebook删除了检索好友数据的选项。唯一的例外是使用同一个应用程序的朋友,所以在我所有的朋友中,有20个显然在使用我的应用程序,这些人就是我从查询中得到的


除此之外,您将无法获得完整的好友列表,也无法获得这些好友的详细信息。

如果您将“v2.2”更改为“v1.0”,那么您将获得您想要的,但请注意1.0 api将很快过期。

谢谢Bogdan!所有这些都试过了,但都不起作用。从安全/隐私的角度来看,这是有意义的,而且这样做也很好。在好日子里,那也是http(没有“s”),你得到了所有的朋友信息,甚至非朋友信息,如果你挖一点:)。