使用android facebook SDK获取朋友的兴趣

时间:2012-12-24 12:24:24

标签: android facebook facebook-android-sdk

在我的应用程序中,我的目的是获得音乐,书籍,电视等朋友的一些兴趣。这些信息是公开的。为此,我想我不需要发送许可。 基于facebook(差)文档,主要是这个链接: Field Expansion为了获得朋友的兴趣我只需要在扩展的朋友字段中传递朋友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:没有朋友的价值。 如果这不是使用GraphAPI获取朋友兴趣的方法,那么我需要做些什么才能获得这些值?

1 个答案:

答案 0 :(得分: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);