2016-08-24 6 views
-4

특정 검색어를 기반으로 FlickR을 쿼리하고 있으며 응답은 JSON 배열입니다. JSON Array에서 하위 항목에 액세스하는 방법

{ 
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"을 얻고 싶습니다. 여기에 개조를 통해 플리커 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라고 볼 수 있듯이, 그래서 당신의 코드에서 볼 수 있듯이이

Call<PhotoResult> call = apiInterface.getImages(query); 
call.enqueue(new Callback<PhotoResult>() {...} 

과 같아야합니다, 콜백 객체의 루트 수준이다 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를 구문 분석해야합니다. POJO에'photos' 객체의 목록이 포함되어 있어야합니다. –

+0

논리에 따라 "총"항목에 액세스하려는 경우 (Java에 매핑 된 JSON을 이미 가지고 있다고 가정 할 때)), 콜백 코드에 무엇을 입력해야합니까? – tccpg288