2014-09-05 18 views
0

下面这个文档: https://developers.facebook.com/docs/graph-api/reference/v2.1/user/pictureFB图形API无法检索档案相片

我曾尝试此代码来获取用户的个人资料图:

new Request(session, "me/picture", 
       getRequestParameters("type", "large"), HttpMethod.GET, 
       new Request.Callback() { 

        public void onCompleted(Response response) { 
         if (response.getError() == null) { 

          GraphObject graphObject = response.getGraphObject(); 
          Object a = graphObject.getProperty("data"); 
          // .getProperty("url"); 
          saveProfilePicInSP(""); 
         } 
        } 

        private void saveProfilePicInSP(String profileUrl) { 
         sharedPreferencesProvider.putString(
           PublicMacros.SP_FB_PROFILE_PIC, profileUrl); 

        } 
       }).executeAsync(); 

但响应:

{Response: responseCode: 200, graphObject: GraphObject{graphObjectClass=GraphObject, state={"FACEBOOK_NON_JSON_RESULT":"����\u0000\u0010JFIF\u0000\u0001\u0002\u0000\u0000\u0001\u0000\u0001\u0000\u0000��\u00006Photoshop"}}, error: null, isFromCache:false} 

我该如何解决这个问题?

模拟在这里:

https://developers.facebook.com/tools/explorer/145634995501895/?method=GET&path=me%2Fpicture%3Ftype%3Dlarge&version=v2.1

示出了不同的反应:

{ 
    "data": { 
    "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xpa1/v/t1.0-1/s200x200/10491996_10154355617635153_5470840249552886594_n.jpg?oh=4dd714d8106d30cd7e548ad3380c7f24&oe=54924987&__gda__=1415264790_4286480e7bd886198a68824ae4f25bf1", 
    "is_silhouette": false 
    } 
} 
+0

那么这个响应在开头就有'JFIF',所以很可能它实际上是一个JPEG图像......(虽然它应该更长,如果它是一个,但我不知道你是否显示了什么我们是完整的回应?)也许你没有在这里正确处理结果... – CBroe 2014-09-06 14:53:06

+0

我该如何正确处理?这里模拟中: https://developers.facebook.com/tools/explorer/145634995501895/?method=GET&path=me%2Fpicture%3Ftype%3Dlarge&version=v2.1 示出了不同的反应: – 2014-09-06 15:06:40

+0

当我请求' https://graph.facebook.com/v2.1/me/picture?type = large&redirect = false&access_token = ...'使用有效的用户访问令牌,我得到与图API API资源管理器中完全相同的响应......如果您想要为了传递实际的图像数据而不是包含图像信息的JSON结构,那么你必须删除'redirect = true' - 然后这个调用将导致HTTP重定向到Facebook CDN上图像的实际URL。 – CBroe 2014-09-06 15:33:07

回答

0

在图形API的/…/picture边缘几个对象类型提供了两种不同的结果“格式”:

  • 你可以得到带有一些关于图片信息的JSON结构(f.e. is_silhouette,它会告诉你它是用户上传的图像,还是用户没有选择的用于对象类型的Facebook默认图像,以及带有其CDN上图像URL的url)或

  • 你可以得到一个HTTP响应,它发出一个重定向到他们CDN上的图片位置 - 有用的fe直接在客户端显示图片,或者如果您想从您的应用程序请求并存储它。

参数redirect允许你明确指定你想要的那两个。 (“默认”会有所不同基于请求的条件,我认为,所以最好明确指定它。)


仅供参考,因为它也是在某些情况下非常有用:还有return_ssl_resources它允许你指定是否希望返回/重定向的URL指向HTTPS或HTTP版本。