7

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

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

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

profilePicBmp = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream());

文档指定了以下用于检索封面照片的内容。

用户的封面照片(必须使用 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"
}

我对 Facebook Graph API 很陌生,因此对如何进行此操作知之甚少。

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

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

但是我一直无法获得用户个人资料的封面图片。

在线搜索也没有产生任何丰硕的结果。

任何帮助确实将不胜感激。

谢谢!

4

5 回答 5

8

“源”标签 (JSONObject) 嵌套在另一个 JSONObject 中,即“封面”标签。要解析这个结果,你将不得不使用这样的东西:

JSONObject JOSource = JOCover.optJSONObject("cover");
String coverPhoto = JOSource.getString("source");

示例中JOCover使用的假设您已经有一个JSONOBject (JOCover)来解析根。你可以用你自己JSONObject的代替它。

“source”标签不能直接访问,因为它嵌套在“cover”标签中。您将不得不使用“ .optJSONObject("cover")”。我见过人们使用.getString而不是,.optJSONObject但我从未使用过它。选择适合你的。

编辑

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

最好在 中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
}

我已经测试了这个解决方案并且工作得很好。您必须fields在基本 URL 中添加活动所需的任何附加内容。为了测试,我只使用了fields=cover

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

于 2012-09-15T04:58:06.390 回答
3

注意:使用 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"
}

使用Graph Tool explorer 2.2验证了这一点me?fields=cover

于 2014-12-20T11:44:19.867 回答
1

您已经有了封面照片 Url,只需从 Json 数组中读取该字符串,您就可以从该字符串中获取封面照片。这是封面照片的网址

"source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg",

像这样,您可以从 Json 对象中获取图像 URL。

String cover_photo = JsonObject.getString("source");
于 2012-09-15T03:43:43.583 回答
1

我在我的应用程序中实现了类似的功能。我就是这样做的,使用 FQL:

String cover_photo = jsonObj.getJSONObject("pic_cover").getString("source");

这提供了封面照片的 url,因为source标签嵌套在pic_cover对象中,然后可以ImageView使用 Universal Image Loader 之类的库将其设置为

于 2014-02-03T16:06:32.407 回答
0
object.getJSONObject("cover").getString("source")
于 2015-10-17T18:22:57.187 回答