获取好友列表facebook 3.0

lea*_*ner 27 android facebook facebook-graph-api facebook-android-sdk

我正在尝试使用新的SDK(3.0)从facebook获取我的朋友列表.我遇到了与我需要在Bundle中插入什么类型的params以及如何使用newMyFriendRequest和GraphAPI相关的问题.

我没有在facebook文档中找到关于我们必须使用哪种字段的地方.基于GraphExplorer,我在我的Bundle中插入了带有"id,name,friend"字符串的键"fields"作为值.下面的代码显示了我现在正在做的事情.在我得到我的照片和名字后,我执行newMyFriendRequest.我相信它默认使用GraphAPI.

我在StackOverflow上看过一些相关帖子:

如何使用新的Android SDK发送FQL查询

Facebook Android SDK请求参数:在哪里查找文档?

它对我帮助很小,我不想使用FQL.对于响应II我收到这个JSON就像一个答案:

{Response:  responseCode: 500, graphObject: null, error: {HttpStatus: 500, errorCode: 100, errorType: FacebookApiException, errorMessage: Unsupported operation}, isFromCache:false}
Run Code Online (Sandbox Code Playgroud)

请注意,我是Facebook SDK for Android的新手.

private void onSessionStateChange(final Session session, SessionState sessionState, Exception ex){
    if(session != null && session.isOpened()){
        getUserData(session);
    }
}

private void getUserData(final Session session){
    Request request = Request.newMeRequest(session, 
        new Request.GraphUserCallback() {
        @Override
        public void onCompleted(GraphUser user, Response response) {
            if(user != null && session == Session.getActiveSession()){
                pictureView.setProfileId(user.getId());
                userName.setText(user.getName());
                getFriends();

            }
            if(response.getError() !=null){

            }
        }
    });
    request.executeAsync();
}

private void getFriends(){
    Session activeSession = Session.getActiveSession();
    if(activeSession.getState().isOpened()){
        Request friendRequest = Request.newMyFriendsRequest(activeSession, 
            new GraphUserListCallback(){
                @Override
                public void onCompleted(List<GraphUser> users,
                        Response response) {
                    Log.i("INFO", response.toString());

                }
        });
        Bundle params = new Bundle();
        params.putString("fields", "id,name,friends");
        friendRequest.setParameters(params);
        friendRequest.executeAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 22

在getFriends()方法中,更改以下行:

params.putString("fields", "id,name,friends");
Run Code Online (Sandbox Code Playgroud)

通过

params.putString("fields", "id, name, picture");
Run Code Online (Sandbox Code Playgroud)


Kir*_*ela 11

使用FQL查询

String fqlQuery = "SELECT uid,name,pic_square FROM user WHERE uid IN " +
        "(SELECT uid2 FROM friend WHERE uid1 = me())";

Bundle params = new Bundle();
params.putString("q", fqlQuery);
Session session = Session.getActiveSession();

Request request = new Request(session,
        "/fql",                         
        params,                         
        HttpMethod.GET,                 
        new Request.Callback(){       
    public void onCompleted(Response response) {
        Log.i(TAG, "Result: " + response.toString());

        try{
            GraphObject graphObject = response.getGraphObject();
            JSONObject jsonObject = graphObject.getInnerJSONObject();
            Log.d("data", jsonObject.toString(0));

            JSONArray array = jsonObject.getJSONArray("data");
            for(int i=0;i<array.length();i++){

                JSONObject friend = array.getJSONObject(i);

                Log.d("uid",friend.getString("uid"));
                Log.d("name", friend.getString("name"));
                Log.d("pic_square",friend.getString("pic_square"));             
            }
        }catch(JSONException e){
            e.printStackTrace();
        }
    }                  
}); 
Request.executeBatchAsync(request); 
Run Code Online (Sandbox Code Playgroud)

参考:运行FQL查询


Moh*_*rma 8

这应该工作:

// @Deprecated
// Request.executeMyFriendsRequestAsync()

// Use this instead:
Request.newMyFriendsRequest(session, new GraphUserListCallback() {

    @Override
    public void onCompleted(List<GraphUser> users, Response response) 
    {
        if(response.getError() == null)
        {
            for (int i = 0; i < users.size(); i++) {
                Log.e("users", "users " + users.get(i).getName());
            }
        }
        else
        {
            Toast.makeText(MainActivity.this, 
                           response.getError().getErrorMessage(), 
                           Toast.LENGTH_SHORT).show();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Den*_*hew 6

不幸的是Facebook删除了这些权限

/ me/friends返回同时使用您的应用的用户的朋友.

在v2.0中,朋友API端点返回正在使用您的应用的人的朋友列表.在v1.0中,响应包括所有人的朋友.

在v1.0中,可以要求允许应用查看有限数量的朋友数据的权限,例如某人的朋友喜欢,他们的生日等等.

在v2.0中,这些权限都已被删除.应用程序不再可能看到来自某个人的朋友的数据,除非这些朋友也登录到应用程序并授予该应用程序查看该数据的权限

https://developers.facebook.com/docs/apps/upgrading#v2_0_friendlist_title