如何在不在列表中搜索的情况下知道是否喜欢帖子

时间:2012-11-22 14:38:24

标签: android facebook facebook-graph-api

我尝试使用fql查询来获取json响应,我使用此代码执行此操作

   String postid=jsonObject.getString("id");

   String query = "SELECT likes.user_likes FROM stream WHERE post_id = \'" + postid + "'";

    Bundle params = new Bundle();
   params.putString("method", "fql.query");
    params.putString("query", query);

   String fqlResponse = Utility.mFacebook.request(params);

   System.out.println(fqlResponse);

但是我在Utility.mFacebook.request(params);

中得到空指针异常

我正在使用Github中的默认类

1 个答案:

答案 0 :(得分:3)

我个人觉得Facebook Graph API有时候有点不足。例如,在您当前的要求中,如果您只需要使用Graph API,则需要首先获取所有喜欢特定帖子的用户的列表。获得列表后,您必须检查用户ID是否与登录用户的用户ID匹配,然后根据结果运行函数或其他内容。

相反,FQL提供了更简单的功能。在我的应用程序中,对于完全相同的功能,我专门使用FQL。

您可以触发一个简单的查询。例如:

SELECT likes.user_likes FROM stream WHERE post_id ='XXXXXXXXXXXXX_XXXXXXXXX'

将X替换为Post的ID。确保使用'YOUR_POST_ID'

包围帖子ID

在Graph API Explorer中尝试这样:fql?q=SELECT likes.user_likes FROM stream WHERE post_id = 'ENTER_YOUR_POST_ID'

运行查询后,您应该得到一个看起来像这样的结果:

{
  "data": [
    {
      "likes": {
        "user_likes": true
      }
    }
  ]
}

如果用户喜欢帖子,则如果用户不喜欢帖子,则字段user_likes为真

您可以像这样解析结果(伪代码):

if (JOLikeStatus.has("likes")) {
    JSONObject optLikes = JOLikeStatus.optJSONObject("likes");

    if (optLikes.has("user_likes")) {
        String getUserLikes = optLikes.getString("user_likes");

        if (getUserLikes.equals("true")) {
            String getLikeStatus = "true";
        } else if (getUserLikes.equals("false")) {
            String getLikeStatus = "false";
        }
    } else {
        String getLikeStatus = null;
    }
} else {
    String getLikeStatus = null;
}

编辑2:要获取总喜欢的数量(计数),请修改之前的查询,如下所示: fql?q=SELECT likes.user_likes, likes.count FROM stream WHERE post_id = 'ENTER_YOUR_POST_ID'