15

Facebook SDK 3.0forAndroidで次の問題が発生しました。ProfilePictureViewウィジェットを使用せずに自分(および友達)のプロフィール写真を取得したいので、グラフエクスプローラーを使用すると、Jsonの応答は次のようになります。

{
   "data": {
         "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/372127_1377011138_1538716206_q.jpg", 
         "is_silhouette": false
    }
}

画像をダウンロードして表示するには、その「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());           
        }
});

私はこれを取得します:

GraphObject{graphObjectClass=GraphObject, 
    state={"FACEBOOK_NON_JSON_RESULT":"����\u0000\u0010JFIF\u0000\u0001\u0001\u0000\u0000\u0001\u0000\u0001\u0000\u0000��\u0000"}}

誰かが私を助けてくれますか?ありがとう

クロミール

4

6 に答える 6

10

より簡単な方法は、最初に画像への URL を要求してから、指定された URL から画像をダウンロードする別の要求を実行する必要がないように、GET要求を実行することです。graph.facebook.com/USER_ID/pictureGET

を使用する代わりに、上記の URL に対してRequest.executeGraphPathRequestAsync通常のリクエストを行うだけです。 GEThttp://graph.facebook.com/4/picture

于 2012-11-28T18:32:08.237 に答える
2

Graph API にリクエストすることで、プロフィール写真を取得できます。ユーザー ID である accessToken を渡し、リダイレクトを false に設定する必要があります。次に、Graph API が JSON を返し、JSON からユーザー プロファイルである url フィールドを取得できます。

  GraphRequest request = new GraphRequest(accessToken, "/" + userID + "/picture",null,HttpMethod.GET, new GraphRequest.Callback() {
                @Override
                public void onCompleted(GraphResponse response) {
                    Log.d("Photo Profile", response.getJSONObject().toString());
                    JSONObject jsonObject = response.getJSONObject();
                    try {

                        JSONObject data = jsonObject.getJSONObject("data");
                        String url = data.getString("url");
                        Picasso.with(getApplicationContext()).load(url).into(ivProfilePicture);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            });
            Bundle parameters =new Bundle();
            parameters.putString("type","large");
            parameters.putBoolean("redirect",false);
            request.setParameters(parameters);
            request.executeAsync();
于 2015-10-29T10:36:12.687 に答える
1

おそらく、開発者コンソール ( https://developers.facebook.com/apps ) のアプリの詳細設定で「Picture As Dictionary」を有効にする必要があります。

于 2012-11-28T17:43:28.493 に答える
0

私は答えを得ました...それはリダイレクトによるものです。したがって、params代わりに渡しますnull

Bundle params = new Bundle();
params.putBoolean("redirect", false);
于 2016-02-11T10:08:31.203 に答える