2016-08-08 18 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" 
     } 

    } 
} 

iは
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'クラスにリストのデータオブジェクトだけでなく、データオブジェクトを使用する必要があります。 – parohy

+0

@parohy java.lang.IllegalStateException:BEGIN_ARRAYは期待されていましたが、行1の列40のパス$ .data – praj

+1

jsonはオブジェクト 'data'を持っていて、' 1,2,3 'というオブジェクトを持っています。より多くのオブジェクト5,6を取得する。これは配列ではない。これは適切な方法ではない。なぜなら、POJOでは、有効でない名前の属性(プロパティ)を持たなければならないからである(変数名は数字で始めることはできません)ですから、私はdata []配列を持つ新しいjsonを再作成することをお勧めします。この方法でPOJOで 'List data;'を使用することができます今、 'List'を使用すると' Expected BEGIN_ARRAY、しかしBEGIN_OBJECT ... 'でした。 – Yazan

答えて

2

APIを変更できますか?はいの場合は、フィールド "1"、 "2"、 "3"のオブジェクトではなく、 "data"オブジェクトを配列に変更してください。 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

2番目の質問は、データオブジェクトの数が変更された場合です。はいの場合は、次のように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)リンク。 –

関連する問題