Android - Facebook API为用户封面照片提供空结果

时间:2012-10-24 03:42:16

标签: android facebook facebook-graph-api

我正在尝试获取用户的封面照片并将其显示在布局的顶部。我正在使用AsyncTask来运行对Facebook的API调用。我用来获取Facebook数据的代码是

JSONObject json = null;
response = Utility.facebook.request("me?fields=cover");
json = Util.parseJson(response);

停止线程的异常来自下一步的json错误,因为返回的json为空,即使请求清除了。我可以使用“我”或“我/专辑”或“me?fields = cover”之外的其他任何东西来获得合适的json。当我注释掉最后一行时,'try'过程结束,没有异常/错误。

Facebook API有问题或者我做错了吗?

3 个答案:

答案 0 :(得分:1)

我个人更喜欢在处理用户个人资料时使用FQL。如果您想尝试FQL,请检查以下代码。如果您想坚持使用Graph API,请参阅以下答案:https://stackoverflow.com/a/12434640/450534

try {
    String query = "SELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE;
    Bundle param = new Bundle();
    param.putString("method", "fql.query");
    param.putString("query", query);

    String response = Utility.mFacebook.request(param);

    JSONArray JAUser = new JSONArray(response);

    for (int i = 0; i < JAUser.length(); i++) {
        JSONObject JOUser = JAUser.getJSONObject(i);

        // COVER PHOTO
        if (JOUser.has("pic_cover"))    {

            String getCover = JOUser.getString("pic_cover");

            if (getCover.equals("null"))    {
                String finalCover = null;
            } else {
                JSONObject JOCoverSource = JOUser.optJSONObject("pic_cover");

                if (JOCoverSource.has("source"))    {
                    String finalCover = JOCoverSource.getString("source");
                } else {
                    String finalCover = null;
                }
            }

        } else {
            String finalCover = null;
        }
    }

} catch (Exception e) {
    // TODO: handle exception
}

以上代码已经说明了用户的个人资料中未设置封面照片并检查其可用性。使用此代码,您将获得封面照片的URL,然后可以根据需要进行处理。

注意:如果您要提取已登录的用户封面照片,则此代码SELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE;也可以写为:SELECT pic_cover FROM user where uid = me()";对于未登录的用户封面照片,上面可以按原样使用。

一些事情作为旁注。

  1. 我使用Fedor's延迟加载技术几乎完全加载图像。
  2. 我建议在AsyncTask中运行代码块,我的或您选择的任何其他解决方案。

答案 1 :(得分:1)

可以在请求(String graphPath)方法的javadoc中找到未获得任何结果的原因:

  

(...)此方法阻止等待网络响应,所以不要   在UI线程中调用它。

在您的情况下,您应该执行以下同步调用:

Bundle params = new Bundle();
params.putString("fields", "cover");
String result = Utility.facebook.request("me/", params);

Siddharth Lele的答案非常正确,但我想说明在这种情况下没有得到任何答复的实际原因。

答案 2 :(得分:0)

注意:使用Facebook API和端点https://graph.facebook.com/me?fields=cover获取封面照片不再适用于2014年12月20日。

应该给出以下回应:

{
   "cover": {
   "cover_id": "10151008748223553",
   "source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg",
   "offset_y": 0
   },
   "id": "19292868552"
}

但现在它只是给了用户id

{
  "id": "19292868552"
}

使用me?fields=cover使用Graph Tool explorer v2.2验证了这一点。