2016-08-08 2 views
0

내 API 연결을 위해 Gson GsonConverterFactory와 함께 개조를 사용하고 있습니다. API를 가져 오는 데 어려움이 있습니다. 복잡한 Json 객체에 대한 GSON POJO 클래스를 만드시겠습니까?

{ 
    status: 100, 
    tb_name: "list", 
    data: { 
     1: { 
      distance: "", 
      Busid: "18", 
      locid: "6309", 
      business_name: " Park", 
      category_name: "Activities", 
      area: "Sharjah", 
      cat_image: "14645915394584643.png", 
      cusine: "", 
      city: "Sharjah", 
      lat_long: "25.342403, 55.379542", 
      image: "14650439123004854.jpg", 
      is_fav: "No" 
     }, 
     2: { 
      distance: "", 
      Busid: "56", 
      locid: "6311", 
      business_name: "Bowling City", 
      category_name: "Activities", 
      area: "Abu Dhabi", 
      cat_image: "14645915394584643.png", 
      cusine: "", 
      city: "Abu Dhabi", 
      lat_long: "24.494183, 54.367608", 
      image: "14650440703886102.jpg", 
      is_fav: "No" 
     }, 
     3: { 
      distance: "", 
      Busid: "56", 
      locid: "6312", 
      business_name: "Bowling City", 
      category_name: "Activities", 
      area: "Deira, Dubai", 
      cat_image: "14645915394584643.png", 
      cusine: "", 
      city: "Dubai", 
      lat_long: "25.251964, 55.332805", 
      image: "14650440703886102.jpg", 
      is_fav: "No" 
     }, 
     4: { 
      distance: "", 
      Busid: "56", 
      locid: "6310", 
      business_name: "Bowling City", 
      category_name: "Activities & Leisure", 
      area: "Al Ain Mall, Al Ain", 
      cat_image: "14645915394584643.png", 
      cusine: "", 
      city: "Al Ain", 
      lat_long: "24.222321, 55.782205", 
      image: "14650440703886102.jpg", 
      is_fav: "No" 
     } 

    } 
} 

은 내가
public class ktbresponse { 
    private String status; 
    private String tb_name; 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getTb_name() { 
     return tb_name; 
    } 

    public void setTb_name(String tb_name) { 
     this.tb_name = tb_name; 
    } 

    public application.myrestapi.com.myrestapiapplication.model.data getData() { 
     return data; 
    } 

    public void setData(application.myrestapi.com.myrestapiapplication.model.data data) { 
     this.data = data; 
    } 

    private data data; 
} 


public class data { 
    private String distance; 
    private String Busid; 

    public String getDistance() { 
     return distance; 
    } 

    public void setDistance(String distance) { 
     this.distance = distance; 
    } 

    public String getBusid() { 
     return Busid; 
    } 

    public void setBusid(String busid) { 
     Busid = busid; 
    } 

    public String getLocid() { 
     return locid; 
    } 

    public void setLocid(String locid) { 
     this.locid = locid; 
    } 

    public String getBusiness_name() { 
     return business_name; 
    } 

    public void setBusiness_name(String business_name) { 
     this.business_name = business_name; 
    } 

    private String locid; 
    private String business_name; 
} 

POJO 클래스

을 생성하지만

Log.e("apiResponse",apiResponse.getStatus());Log.e("apiResponse",apiResponse.getData().getBusiness_name());

만 status.not 작업 데이터를 인쇄 인쇄 할 때. 나는 구조의이 유형을 처음 보는 것이다. 내가 무엇을 잘못했는지 알게 해주세요. 이 구조체를위한 Pojo 클래스를 만드는 방법은?

+0

'ktbresponse' 클래스에있는 간단한 데이터 객체가 아니라 List 데이터를 사용해야합니다. – parohy

+0

@parohy java.lang.IllegalStateException : 예상 된 BEGIN_ARRAY하지만 BEGIN_OBJECT 1 행 40 열 경로 $ .data – praj

+1

귀하의 json 의미 개체'데이터', 그것은'1, 2, 3' 개체를 가지고, 나는 그것이있을 수 있습니다 더 많은 객체 5, 6 ...을 동시에 얻는다. POJO에서 유효하지 않은 이름 (속성)을 가질 필요가 있기 때문에 적절한 방법이 아닌 배열이 아니다. (변수 이름은 숫자로 시작할 수 없습니다) 그래서 내가 제안하는 것은 데이터 [] 배열을 가질 새로운 json을 다시 만드는 것이므로이 POJO에서'List data;'를 POJO에서 사용할 수 있습니다. 이제'List'를 사용하면 'Expected BEGIN_ARRAY,하지만 BEGIN_OBJECT ...'가됩니다. – Yazan

답변

2

API를 수정할 수 있습니까? 그렇다면 "데이터"객체를 필드 "1", "2", "3"이있는 객체 대신 배열로 변경하십시오. json으로는 같을 것이다 :

{ 
status: 100, 
tb_name: "list", 
data: [ 
    { 
     distance: "", 
     Busid: "18", 
     locid: "6309", 
     business_name: " Park", 
     category_name: "Activities", 
     area: "Sharjah", 
     cat_image: "14645915394584643.png", 
     cusine: "", 
     city: "Sharjah", 
     lat_long: "25.342403, 55.379542", 
     image: "14650439123004854.jpg", 
     is_fav: "No" 
    }, 
    { 
     distance: "", 
     Busid: "56", 
     locid: "6311", 
     business_name: "Bowling City", 
     category_name: "Activities", 
     area: "Abu Dhabi", 
     cat_image: "14645915394584643.png", 
     cusine: "", 
     city: "Abu Dhabi", 
     lat_long: "24.494183, 54.367608", 
     image: "14650440703886102.jpg", 
     is_fav: "No" 
    }, 
    { 
     distance: "", 
     Busid: "56", 
     locid: "6312", 
     business_name: "Bowling City", 
     category_name: "Activities", 
     area: "Deira, Dubai", 
     cat_image: "14645915394584643.png", 
     cusine: "", 
     city: "Dubai", 
     lat_long: "25.251964, 55.332805", 
     image: "14650440703886102.jpg", 
     is_fav: "No" 
    }, 
    { 
     distance: "", 
     Busid: "56", 
     locid: "6310", 
     business_name: "Bowling City", 
     category_name: "Activities & Leisure", 
     area: "Al Ain Mall, Al Ain", 
     cat_image: "14645915394584643.png", 
     cusine: "", 
     city: "Al Ain", 
     lat_long: "24.222321, 55.782205", 
     image: "14650440703886102.jpg", 
     is_fav: "No" 
    }  
    ] 
} 

및 모델에서 당신은 목록을 문제를 해결할

+0

수정할 수 없습니다. 오래 전에 완료되어 일부 사람이 수행했습니다. – praj

+1

두 번째 질문은 데이터 개체 수가 변경되는 경우입니다. 그렇다면 다음과 같이 pojo를 만들 수 있습니다 : { @SerializedName ("1") 데이터 firstData; @SerializedName ("2") 데이터 secondData; ... } –

+0

그렇지 않다면 상당히 복잡한 사용자 정의 디시리얼라이저를 만들어야합니다. –

0

GSON 포맷터있을 것입니다. json 템플릿에서 모델을 만들 수 있습니다.

+0

예제 또는 샘플 코드를 알려주십시오 – praj

+0

gsonformat을 사용하여 json 템플릿을 테스트했지만 json이 제대로 포맷되지 않은 것 같습니다. [GsonFormat] (https://plugins.jetbrains.com/plugin/7654?pr=androidstudio) 링크. –