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"
}

私はFacebookGraphAPIにかなり慣れていないので、これを行う方法についてあまり知識がありません。

私はこれを試しました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である「cover」タグ内にネストされています。この結果を解析するには、次のようなものを使用する必要があります。

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

この例で使用されているのは、ルートを解析するためJOCoverのがすでにあることを前提としています。JSONOBject (JOCover)あなたはその代わりにあなた自身のものを代用することができますJSONObject

「source」タグは「cover」タグにネストされているため、直接アクセスすることはできません。「」を使用する必要があります.optJSONObject("cover")。私は人々が.getString代わりに使うのを見.optJSONObjectたことがありますが、私はそれを使ったことがありません。自分に合ったものを選択してください。

編集

Graph APIを使用したソリューションのリクエストに応じて、以前のソリューションを編集し、GraphAPIソリューションに置き換えています。

できれば、で、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"
}

を使用してGraphToolexplorer2.2を使用してこれを確認しme?fields=coverました。

于 2014-12-20T11:44:19.867 に答える
1

あなたはすでにカバー写真を持っていますUrlはJson配列からその文字列を読んだだけです。その文字列からあなたはカバー写真を得ることができます。これはカバー写真のURLです

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

このように、JsonオブジェクトからImageUrlを取得できます。

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

私は自分のアプリに同様の機能を実装しました。これは私がFQLを使用してそれをした方法です:

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

sourceタグはオブジェクト内にネストされているため、これによりカバー写真のURLが提供されます。これは、 UniversalImageLoaderなどのライブラリを使用してpic_cover設定できます。ImageView

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