0

在我的应用程序中,我的目的是获得朋友的一些兴趣,例如音乐、书籍、电视。此信息是公开的。为此,我认为我不需要发送许可。基于 facebook (poor) 文档,主要是这个链接: Field Expansion to get friend interest 我只需要在扩展的朋友字段中传递朋友 ID。在 GraphExplorer 上做一些测试,我看到它创建了以下查询来从某个朋友那里获取电影:

MY_ID?fields=friends.uid(FRIEND_ID).fields(movies)

我使用它并在 Request.newMyFriendRequest 上异步执行此代码:

Session activeSession = Session.getActiveSession();
    if(activeSession.getState().isOpened()){
        Request request = Request.newMyFriendsRequest(activeSession, 
            new GraphUserListCallback(){
                @Override
                public void onCompleted(List<GraphUser> users, Response response){
                    GraphUser user = users.get(0);
                    JSONObject friendLikes = user.getInnerJSONObject();
                    try {
                        JSONArray data = friendLikes.getJSONObject("friends").getJSONArray("data");
                        Log.i("JSON", friendLikes.toString());
                        addInterests(data, 0);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
        });
        Bundle bundle = new Bundle();
        bundle.putString("fields", "friends.uid("+friendID+").fields(movies)");
        request.setParameters(bundle);
        request.executeAsync();

每次执行此代码时,我都会从 JSON 收到以下错误:W/System.err(694): org.json.JSONException: No value for friends。如果这不是使用 GraphAPI 获得朋友兴趣的方法,我需要做什么才能获得这些值?

4

1 回答 1

1

[编辑]解决了在登录时发布friends_likes 权限的问题。权限不在请求内发送。我修改了一些我的解决方案。如果有人感兴趣:

String fqlQuery = "SELECT music, books, movies FROM user where uid ="+friendID;
        Bundle bundle = new Bundle();
        bundle.putString("q", fqlQuery);
        Request request = new Request(activeSession, "/fql", bundle, HttpMethod.GET, 
            new Request.Callback() {
                @Override
                public void onCompleted(Response response) {
                    // TODO Auto-generated method stub
                    Log.i("INFO", response.toString());
                }
            });
        Request.executeBatchAsync(request);
于 2012-12-24T15:30:12.577 回答