使用Facebook SDK 3.0 for Android检索个人资料图片

Giu*_*der 15 android facebook facebook-graph-api facebook-android-sdk

我关注Facebook SDK 3.0 for Android的问题.我想在不使用他们的ProfilePictureView小部件的情况下获取我的(和我的朋友)个人资料图片,所以如果我使用Graph Explorer,我会看到Json响应是:

{
   "data": {
         "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/372127_1377011138_1538716206_q.jpg", 
         "is_silhouette": false
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要"url"路径下载并显示图片,但使用以下代码:

Request.executeGraphPathRequestAsync(Session.getActiveSession(), 
                                     "me/picture", 
                                      new Request.Callback() {
        @Override
        public void onCompleted(Response response) {
            GraphObject go = response.getGraphObject();
            Log.i("APP_NAME", go.toString());           
        }
});
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

GraphObject{graphObjectClass=GraphObject, 
    state={"FACEBOOK_NON_JSON_RESULT":"????\u0000\u0010JFIF\u0000\u0001\u0001\u0000\u0000\u0001\u0000\u0001\u0000\u0000??\u0000"}}
Run Code Online (Sandbox Code Playgroud)

有人可以帮帮我吗?谢谢

Cromir

Jes*_*hen 10

一种更简单的方法是执行GET请求,graph.facebook.com/USER_ID/picture这样您就不必首先请求图片的URL,然后执行另一个GET请求从给定的URL下载图片.

而不是使用Request.executeGraphPathRequestAsync,只需GET对上面的URL 执行正常请求,例如http://graph.facebook.com/4/picture.


Muh*_*Ali 9

You can retreive user information for executeMeRequest in facebook 3.0 sdk.

    public void executeMeRequest(Session session) {

        Bundle bundle = new Bundle();
        bundle.putString("fields", "picture");
        final Request request = new Request(session, "me", bundle,
                HttpMethod.GET, new Request.Callback() {

            @Override
            public void onCompleted(Response response) {
                GraphObject graphObject = response.getGraphObject();
                if(graphObject != null) {
                    try {
                        JSONObject jsonObject = graphObject.getInnerJSONObject();
                        JSONObject obj = jsonObject.getJSONObject("picture").getJSONObject("data");
                        final String url = obj.getString("url");
                            new Thread(new Runnable() {

                                @Override
                                public void run() {

                                    final Bitmap bitmap = BitmapFactory.decodeStream(HttpRequest(url);
                                    runOnUiThread(new Runnable() {

                                        @Override
                                        public void run() {
                                            imageView.setImageBitmap(bitmap);
                                        }
                                    });
                                }
                            }).start();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        Request.executeBatchAsync(request);
    }

public static InputStream HttpRequest(String strUrl) {

    HttpResponse responce = null;
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        request.setURI(new URI(strUrl));
        responce = httpClient.execute(request);
        HttpEntity entity = responce.getEntity();
        return entity.getContent();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)


Rya*_*n S 1

您可能需要在开发者控制台中的应用程序高级设置中启用“图片作为字典”:https://developers.facebook.com/apps