使用Facebook API获取封面照片

Swa*_*yam 7 android facebook facebook-graph-api

在我的Android应用程序中,我试图从他的Facebook帐户获取用户的封面照片.

我可以使用下面的代码获取个人资料图片.

profilePicUrl = new URL("http://graph.facebook.com/" + userId + "/picture?type=large");

profilePicBmp = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream());
Run Code Online (Sandbox Code Playgroud)

文档指定了以下用于检索封面照片.

用户的封面照片(必须使用fields = cover参数明确请求)

需要access_token

返回:字段数组id,source和offset_y

因此,JSON响应的结构将是这样的.

{
   "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"
}
Run Code Online (Sandbox Code Playgroud)

我是Facebook Graph API的新手,因此对如何解决这个问题知之甚少.

我试过这个 coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/cover?type=large");

还有这个 coverPicUrl = new URL("http://graph.facebook.com/" + userId + "/fields=cover");

但我无法获得用户个人资料的封面图片.

在线搜索也没有取得任何丰硕成果.

任何帮助确实会受到赞赏.

谢谢!

Sid*_*ele 8

"source"标记(JSONObject)嵌套在另一个JSONObject("cover"标记)中.要解析此结果,您必须使用以下内容:

JSONObject JOSource = JOCover.optJSONObject("cover");
String coverPhoto = JOSource.getString("source");
Run Code Online (Sandbox Code Playgroud)

JOCover本例中使用假定你已经有了一个JSONOBject (JOCover)解析的根.您可以替换自己JSONObject的位置.

无法直接访问"source"标记,因为它嵌套在"cover"标记中.你必须使用" .optJSONObject("cover")".我见过人们用.getString而不是用,.optJSONObject但我从来没用过它.选择适合你的方法.

编辑

根据您对使用Graph API的解决方案的要求,我正在编辑早期的解决方案并将其替换为Graph API解决方案.

优选地,在a中AsyncTask,使用以下代码doInBackground:

String URL = "https://graph.facebook.com/" + THE_USER_ID + "?fields=cover&access_token=" + Utility.mFacebook.getAccessToken();

String finalCoverPhoto;

try {

    HttpClient hc = new DefaultHttpClient();
    HttpGet get = new HttpGet(URL);
    HttpResponse rp = hc.execute(get);

    if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String result = EntityUtils.toString(rp.getEntity());

        JSONObject JODetails = new JSONObject(result);

        if (JODetails.has("cover")) {
            String getInitialCover = JODetails.getString("cover");

            if (getInitialCover.equals("null")) {
                finalCoverPhoto = null;
        } else {
            JSONObject JOCover = JODetails.optJSONObject("cover");

            if (JOCover.has("source"))  {
                finalCoverPhoto = JOCover.getString("source");
            } else {
                finalCoverPhoto = null;
            }
        }
    } else {
        finalCoverPhoto = null;
    }
} catch (Exception e) {
    // TODO: handle exception
}
Run Code Online (Sandbox Code Playgroud)

我已经测试了这个解决方案并且完美地工 您必须添加fields活动所需的基本URL的任何添加内容.为了测试,我只使用了fields=cover

并在onPostExecute,你做的事情显示封面图片.希望这可以帮助.