2017-12-30 27 views
0

数日経過してこの問題に直面しました。どんな助けも大いに評価されるでしょう。私はこの問題をどうやって解決できますか?GSON投げ予想BEGIN_OBJECTでしたが、BEGIN_ARRAYでした

GSON期待BEGIN_OBJECTを投げたがBEGIN_ARRAY

override fun onSuccess(str_SUCCESS: String) 
    { 
     System.out.println("JSON_IS"+str_SUCCESS) 

     val paymentScheduleModel = Gson().fromJson<PaymentScheduleModel>(str_SUCCESS, PaymentScheduleModel::class.java) // Problem here 

    } 

JSONレスポンスから来

問題だったの

{ 
    "status": { 
    "statusCode": 10016, 
    "isSuccess": true, 
    "message": "Success" 
    }, 
    "data": { 
    "payback_schedule": [ 
     { 
     "id": 2, 
     "paid_amount": "INR NaN", 
     "paidStatus": "Upcoming Payback", 
     "paid_status": "P", 
     "s_date": "05/01/2018 12:31:10", 
     "e_date": "11/01/2018 12:31:10", 
     "current_balance": "INR 399", 
     "payanytime_button_status": "active", 
     "btnColor": "red", 
     "btnHexColor": "#D2322D" 
     }, 
     { 
     "id": 3, 
     "paid_amount": "INR NaN", 
     "paidStatus": "Upcoming Payback", 
     "paid_status": "P", 
     "s_date": "12/01/2018 12:31:10", 
     "e_date": "18/01/2018 12:31:10", 
     "current_balance": "INR 399", 
     "payanytime_button_status": "active", 
     "btnColor": "red", 
     "btnHexColor": "#D2322D" 
     } 
    ] 
    } 
} 

PaymentScheduleMoですdel

data class PaymentScheduleModel(@SerializedName("payback_schedule") val payback_schedule: PaymentSchedule) 

data class PaymentSchedule 

         (@SerializedName("id") val id: Int, 
         @SerializedName("paid_amount") val paid_amount:String, 
         @SerializedName("paidStatus") val paidStatus:String, 
         @SerializedName("paid_status") val paid_status:String, 
         @SerializedName("s_date") val s_date:String, 
         @SerializedName("e_date") val e_date:String, 
         @SerializedName("current_balance") val current_balance:String, 
         @SerializedName("payanytime_button_status") val payanytime_button_status:String, 
         @SerializedName("btnColor") val btnColor:String, 
         @SerializedName("btnHexColor") val btnHexColor:String) 
+0

こんにちは@カンカナ、あなたのモデルクラスは適切に見えません。モデルクラスを作成するには、gson converterまたはpojo generatorを使用します。 –

+0

JSON 'payback_schedule'はオブジェクトではない配列です。それはあなたを助けるhttps://stackoverflow.com/a/45605731/4693278 –

答えて

0

モデルオブジェクトがあなたのJsonと一致しません。

あなたはタイプPaymentScheduleのサブオブジェクト「payback_schedule」を持っていますが、サブオブジェクト「payback_schedule」を持っているものであるサブオブジェクト「データ」を持っているJsonObjectを持ってJsonObject PaymentScheduleModelを解析しようとしています。だから本当に、あなたは "データ"ブロックを解析したいと思っています。

1:

次の2つのオプションがあり、データブロックをラップ別のモデルを作成し、その解析:

data class PaymentScheduleData(@SerializedName("data") val payback_schedule_model: PaymentScheduleModel) 

override fun onSuccess(str_SUCCESS: String) { 
    val paymentScheduleData = Gson().fromJson<PaymentScheduleData>(str_SUCCESS, PaymentScheduleData::class.java) 
    // Now use paymentScheduleData.payback_schedule_model 
} 

2:最初のデータ部分を引き出し、その後の解析:

override fun onSuccess(str_SUCCESS: String) { 
    // Get the root JsonObject 
    val jsonObject = Gson().fromJson<JsonObject>(str_SUCCESS, JsonObject::class.java) 

    // Get the "data" block that matches the model and parse that 
    val paymentScheduleModel = Gson().fromJson<PaymentScheduleModel>(jsonObject.getAsJsonObject("data"), PaymentScheduleModel::class.java) 
} 

希望に役立ちます!

0

payback_scheduleにobjectではなく配列が格納されているというエラーが表示されます。だからpayback_schedulePaymentScheduleの代わりにArray<PaymentSchedule>になるはずです。

data class PaymentScheduleModel(@SerializedName("payback_schedule") val payback_schedule: Array<PaymentSchedule>) 

PS。デフォルトの実装がArrayequals()関数のreferential equalityを比較するため、データクラスにArrayが含まれている場合は、equals()hashCode()関数を実装することをお勧めします。推奨読書:Equals method for data class in kotlin

関連する問題