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

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


停止线程的异常来自下一步的json错误,因为返回的json为空,即使请求已清除。我可以使用“ me”或“ me / albums”或“ me?fields = cover”以外的任何内容来获取合适的json。当我注释掉最后一行时,“尝试”过程完成,没有任何异常/错误。

Facebook API有问题吗?还是我做错了?

最佳答案

我个人更喜欢在处理用户个人资料时使用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()";对于未登录用户的封面照片,以上内容可以照常使用。

几件事作为旁注。


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

关于android - Android-Facebook API为用户封面照片提供空结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13042698/

10-09 13:25