Retrofit-非空主体上的onFailure,空主体上的onResponse
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Retrofit-非空主体上的onFailure,空主体上的onResponse相关的知识,希望对你有一定的参考价值。
我的GET请求在android Studio中无法正常工作。我试图在邮递员中提出相同的请求,结果我总是得到带有正确正文的响应代码200。但是,使用Retrofit时,当响应主体为空(没有数据)时,我会收到onResponse(200代码),而当响应主体不为空(有一些保留)时,我会得到onFailure。
编辑:我刚刚在日志中注意到这样的错误:Expected BEGIN_OBJECT but was STRING at line 1 column 22 path $[0].reservationDate
EDIT2:JSON响应
[ { "reservationDate": "2019-10-30", "id": "4" } ]
API服务:
@Headers("Authorization: Bearer ...") @GET("reservations") fun getSchedule(@Query("id") id: Int, @Query("reservationDate") reservationDate: LocalDate ): Call<List<ScheduleModel>> companion object { fun create(): ScheduleService{ var retrofit = Retrofit.Builder() .baseUrl("myUrl") .addConverterFactory(GsonConverterFactory.create()) .build() return retrofit.create(ScheduleService::class.java) } } }
data class ScheduleModel( val id: Int, val reservationDate: LocalDate )
fun getReservations() { var service = ScheduleService.create() var localdate = LocalDate.of(2019,10,30) var call = service.getSchedule(4, localdate) call.enqueue(object : Callback<List<ScheduleModel>> { override fun onResponse(call: Call<List<ScheduleModel>>, response: Response<List<ScheduleModel>>) { if (response.code() == 200) { Toast.makeText(applicationContext, "It's ok", Toast.LENGTH_SHORT).show() } } override fun onFailure(call: Call<List<ScheduleModel>>, t: Throwable) { Toast.makeText(applicationContext, "Failure", Toast.LENGTH_SHORT).show() } }) }
我的GET请求在Android Studio中无法正常工作。我试图在邮递员中提出相同的请求,结果我总是得到带有正确正文的响应代码200。但是,使用翻新我得到...
您的'id'和'reservationDate'在响应中是一个字符串,但是您尝试将其解析为Int和LocalDate。更改类型,它将起作用。
以上是关于Retrofit-非空主体上的onFailure,空主体上的onResponse的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Retrofit 中将 InputStream 作为请求的主体发布?
如何使用 Retrofit 2 + OkHttp 3 加密/隐藏 HTTPS 调用的主体?
Retrofit 中的 Enqueue 方法不会在 Fragment 中加载数据
解决:Retrofit请求返回: Expected a string but was BEGIN_OBJECT at line 1 column 4832 path $