使用Facebook API获取封面照片

在我的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://sofzh.miximages.com/android/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");

但我一直无法获得用户configuration文件的封面图片。

在网上search也没有产生任何有成效的结果。

任何帮助的确会被赞赏。

谢谢!

Solutions Collecting From Web of "使用Facebook API获取封面照片"

“source”标记(JSONObject)嵌套在另一个JSONObject(“cover”标记)中。 parsing这个结果,你将不得不使用这样的东西:

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

JOCover使用的JOCover假定您已经有一个JSONOBject (JOCover)来parsing根。 你可以用你自己的JSONObject代替它。

“源”标签不能直接访问,因为它嵌套在“封面”标签中。 你将不得不使用“ .optJSONObject("cover") ”。 我看到人们使用.getString而不是.optJSONObject但我从来没有使用它。 select适合你的东西。

编辑

根据您对使用Graph API的解决scheme的要求,我正在编辑较早的解决scheme,并使用Graph API解决scheme进行replace。

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

我已经testing了这个解决scheme并且完美地工 您必须将任何附加fields添加到您的活动所需的基本URL。 为了testing,我只用了fields=cover

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

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

本来应该给出如下回应:

 { "cover": { "cover_id": "10151008748223553", "source": "http://sofzh.miximages.com/android/391237_10151008748223553_422785532_n.jpg", "offset_y": 0 }, "id": "19292868552" } 

但现在它只是给用户的id

 { "id": "19292868552" } 

使用graphics工具浏览器2.2使用me?fields=cover来validation这个me?fields=cover

你已经覆盖了照片Url只是从Json数组读取string,从该string你可以得到封面照片。 这是封面照片的url

 "source": "http://sofzh.miximages.com/android/391237_10151008748223553_422785532_n.jpg", 

像这样你可以从Json对象中获得Image Url。

 String cover_photo = JsonObject.getString("source"); 

我在我的应用程序中实现了类似的function。 这是我如何做到的,使用FQL:

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

这给了一个封面照片的URL,因为source标签是嵌套在pic_cover对象,然后可以设置为一个ImageView使用像通用图像加载器

 object.getJSONObject("cover").getString("source")