[英]java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ - Retrofit 2 Android kotlin
I am new to kotlin android. I want to fetch a list of orders in my recyclerView
.我是 kotlin android 的新手。我想在我的
recyclerView
中获取订单列表。 Here is my json
response:这是我的
json
回复:
{
"orders": [
{
"id": "be67f572-0305-4c8f-a2c5-d07a10cd9860",
"totalCount": 2,
"totalPrice": 50.16000,
"orderNumber": 1007
},
{
"id": "9a661a3e-8428-4930-bb0e-30a59a7b6e1f",
"totalCount": 5,
"totalPrice": 337.21000,
"orderNumber": 1014
},
{
"id": "59fa6488-7740-43f7-8985-833987ce4a6c",
"totalCount": 5,
"totalPrice": 337.21000,
"orderNumber": 1016
}
]
}
I have created my POJO class
like this:我像这样创建了我的 POJO
class
:
data class OrderInQueue(
var orders: List<Order>
) {
data class Order(
var id: String,
var orderNumber: Int,
var totalCount: Int,
var totalPrice: Double
)
}
Here is my api web service code:这是我的 api web 服务代码:
@GET("api/v1/shopper/orders/feed")
fun getOrderList (@Header("Authorization") authHeader:String) : Call<List<OrderInQueue>>
MainActivity Retrofit code: MainActivity Retrofit代码:
private fun loadOrders() {
//initiate the service
val destinationService = ServiceBuilder.getRetrofitInstance().create(WebService::class.java)
val requestCall = destinationService.getOrderList("Bearer "+sessionManager.GetAccessToken())
//make network call asynchronously
requestCall.enqueue(object : Callback<List<OrderInQueue>> {
override fun onResponse(
call: Call<List<OrderInQueue>>,
response: Response<List<OrderInQueue>>
) {
Log.d("Response", "onResponse: ${response.body()}")
if (response.isSuccessful) {
val orderList = response.body()?.toMutableList()
// Log.d("Response", "countrylist size : ${countryList.size}")
orderRecyclerView.apply {
setHasFixedSize(true)
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = orderList?.let { orderAdapter(it, this@MainActivity) }
}
Log.e( "response","Successful ${response.message()}")
// Log.d("Response", "things : ${things}")
// markButtonenble(iv_next)
} else {
Toast.makeText(
this@MainActivity,
"wrong ${response.message()}",
Toast.LENGTH_SHORT
).show()
Log.e( "response","Something went wrong ${response.message()}")
}
}
override fun onFailure(call: Call<List<OrderInQueue>>, t: Throwable) {
Toast.makeText(this@MainActivity, "Something went wrong $t", Toast.LENGTH_SHORT)
.show()
Log.e( "Response","Something went wrong $t")
}
})
}
But failed to fetch response with error:但未能获取错误响应:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
Objects begin with {
and arrays begin with [
the actual response
begin with an object so you should change your expected response
to an object .对象以
{
开头, arrays以[
开头,实际response
以object开头,因此您应该将预期response
更改为object 。
Change this:改变这个:
@GET("api/v1/shopper/orders/feed")
fun getOrderList (@Header("Authorization") authHeader:String) : Call<List<OrderInQueue>>
to至
@GET("api/v1/shopper/orders/feed")
fun getOrderList (@Header("Authorization") authHeader:String) : Call<OrderInQueue>
your json response doesn't actually return a list of orders but just an order... And this order contains a list of orders... That's why your response wants only one object and not a list of them.您的 json 响应实际上并没有返回订单列表,而只是一个订单...而此订单包含一个订单列表...这就是为什么您的响应只需要一个 object 而不是它们的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.