2016-08-24 13 views
-4

特定の検索条件に基づいてFlickRを照会しています。応答はJSON配列です。ここでは最初の二つの結果と一緒にルートレベルは次のとおりです。JSON配列の子アイテムにアクセスする方法

{ 
photos: { 
    page: 1, 
    pages: 4222, 
    perpage: 100, 
    total: "422175", 
     photo: [ 
      { 
      id: "28571356563", 
      owner: "[email protected]",secret: "c4ca6c4364", 
      server: "8050", 
      farm: 9, 
      title: "95040021.jpg", 
      ispublic: 1, 
      isfriend: 0, 
      isfamily: 0, 
      url_m: "https://farm9.staticflickr.com/8050/28571356563_c4ca6c4364.jpg", 
      height_m: "332", 
      width_m: "500" 
       }, 
      { 
      id: "28571342883", 
      owner: "[email protected]", 
      secret: "db35a59412", 
      server: "8307", 
      farm: 9, 
      title: "Red #Sunset #Silhouette #Trees #Photography", 
      ispublic: 1, 
      isfriend: 0, 
      isfamily: 0, 
      url_m: "https://farm9.staticflickr.com/8307/28571342883_db35a59412.jpg", 
      height_m: "500", 
      width_m: "424" 
      }, 

私は結果をロードすると、私は(「合計」の図)すべての項目を反復処理し、RecyclerViewにロードするつもりです。

最終的に、私は "写真"を繰り返し、各写真の "url_m"を取得したいと思います。ここではレトロフィットによるFlickrのAPIに私の現在の呼び出しは次のとおりです。

Call<List<Photo>> call = apiInterface.getImages(mQuery); 
      call.enqueue(new Callback<List<Photo>>() { 
       @Override 
       public void onResponse(Call<List<Photo>> call, Response<List<Photo>> response) { 

       } 

       @Override 
       public void onFailure(Call<List<Photo>> call, Throwable t) { 

       } 
      }); 

     } 
    }); 

どのように私はすべての写真を反復処理し、それぞれの写真のURLを取得するのでしょうか? FlickR API JSONオブジェクトにマップされたそれぞれのモデルクラスを設定しています。

答えて

1

あなたのコードに間違ったRetrofitコールバックを実装していると思います。私はあなたが最初JSONObjectを受信して​​いる見ることができるようにJSONArray photoが含まれていることphotosと呼ばれるので、あなたのコードは、あなたが見ることができるように、コールバックオブジェクトは、あなたのルートレベルでPhotoResultある

このような
Call<PhotoResult> call = apiInterface.getImages(query); 
call.enqueue(new Callback<PhotoResult>() {...} 

になりますjsonレスポンス、そして内部でList<Photo>コレクションを取得する必要があります。

それは、その後 を呼び出すことがないでしょう、あなたは http://www.jsonschema2pojo.org/

あなたのPOJOをJSONに基づくと、この

public class PhotoResult { 
    @SerializedName("photos") 
    @Expose 
    public Photos photos; 
} 

public class Photos { 
    @SerializedName("page") 
    @Expose 
    public Integer page; 
    @SerializedName("pages") 
    @Expose 
    public Integer pages; 
    @SerializedName("perpage") 
    @Expose 
    public Integer perpage; 
    @SerializedName("total") 
    @Expose 
    public String total; 
    @SerializedName("photo") 
    @Expose 
    public List<Photo> photo = new ArrayList<Photo>(); 
} 

public class Photo { 
    ... 
} 
+0

ようにする必要があり、このウェブサイトを使用することができ、あなたのPOJOを生成するには? – tccpg288

+0

最初のPOJOは 'photos' JSONObjectを解析し、' photos'オブジェクトのリストを含むPOJOを返します。 –

+0

そのロジックに基づいて、「total」アイテムにアクセスしたい場合は、 )、コールバックコードには何を入力しますか? – tccpg288

関連する問題