2

ユーザーのカバー写真を取得して、レイアウトの上部に表示しようとしています。FacebookへのAPI呼び出しを実行するためにAsyncTaskを使用しています。Facebookのデータを取得するために使用しているコードは

JSONObject json = null;
response = Utility.facebook.request("me?fields=cover");
json = Util.parseJson(response);

スレッドを停止する例外は、リクエストがクリアされても、返されたjsonが空であるため、次のステップのjsonエラーが原因です。「me」または「me/albums」または「me?fields=cover」以外のものを使用して適切なjsonを取得できます。最後の行をコメントアウトすると、「try」プロセスは例外/エラーなしで終了します。

Facebook APIに何か問題がありますか、それとも私は何か問題を抱えていますか?

4

3 に答える 3

1

私は個人的に、ユーザープロファイルを扱うときにFQLを使用することを好みます。FQLを試してみたい場合は、次のコードを確認してください。Graph APIを使い続けたい場合は、次の回答を参照してください:https ://stackoverflow.com/a/12434640/450534

try {
    String query = "SELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE;
    Bundle param = new Bundle();
    param.putString("method", "fql.query");
    param.putString("query", query);

    String response = Utility.mFacebook.request(param);

    JSONArray JAUser = new JSONArray(response);

    for (int i = 0; i < JAUser.length(); i++) {
        JSONObject JOUser = JAUser.getJSONObject(i);

        // COVER PHOTO
        if (JOUser.has("pic_cover"))    {

            String getCover = JOUser.getString("pic_cover");

            if (getCover.equals("null"))    {
                String finalCover = null;
            } else {
                JSONObject JOCoverSource = JOUser.optJSONObject("pic_cover");

                if (JOCoverSource.has("source"))    {
                    String finalCover = JOCoverSource.getString("source");
                } else {
                    String finalCover = null;
                }
            }

        } else {
            String finalCover = null;
        }
    }

} catch (Exception e) {
    // TODO: handle exception
}

上記のコードは、プロファイルにカバー写真が設定されていないユーザーをすでに考慮しており、その可用性を確認しています。このコードを使用するURLと、カバー写真が表示され、必要に応じて処理できます。

注:ログインしているユーザーのカバー写真を取得する場合、このコードは次のSELECT pic_cover FROM user where uid = " + PUT_THE_USER_ID_HERE;ように記述することもできSELECT pic_cover FROM user where uid = me()";ます。ログインしていないユーザーのカバー写真の場合、上記をそのまま使用できます。

補足としていくつかのこと。

  1. 私はFedorの遅延読み込み手法を使用して、ほぼ排他的に画像を読み込みます。
  2. コードブロック、マイニング、または選択したその他のソリューションをで実行することをお勧めしますAsyncTask
于 2012-10-24T05:04:41.743 に答える
1

結果が得られない理由は、request(StringgraphPath)メソッドのjavadocにあります。

(...)このメソッドはネットワーク応答の待機をブロックするため、UIスレッドで呼び出さないでください。

あなたの場合、おそらく次の同期呼び出しを行う必要があります。

Bundle params = new Bundle();
params.putString("fields", "cover");
String result = Utility.facebook.request("me/", params);

Siddharth Leleの答えは非常に正しいですが、この場合に応答がない実際の理由を特定したいと思います。

于 2012-10-25T01:30:43.673 に答える
0

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

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

于 2014-12-20T11:54:08.157 に答える