Android:收到响应“ 200 ok”,但改装失败

时间:2019-10-12 12:10:58

标签: android web-services kotlin retrofit

我正在发布带有Retrofit2的JSON数组,但是当我发布它时,我收到“ 200 Ok”响应,并且调用了Retrofit的onFailed方法。并显示“预期为BEGIN_ARRAY,但在第1行第2列路径$处为STRING”

我是否已成功将JSON发送到WebService?如果成功,那么改造为何失败? 我的JSON数组如下:

[{"Date":"2019-01-01T00:00:00","Duration":"25","Type":1,"Number":"53201","id":0,"isDataSent":false,"Name":"test isim","phoneNumber":"5554242422"}]

我已经用PostMan测试了JSON。很好。

我的改装请求如下:

RetrofitClient.getClient()
            .postCallModel(list)
            .enqueue(object : Callback<List<CallLogModel>>{
                override fun onFailure(call: Call<List<CallLogModel>>, t: Throwable) {
                    Log.d(tag,"Retrofit Failed!")
                    Log.d(tag,call.toString())
                    Log.d(tag,t.message)
                }

                override fun onResponse(call: Call<List<CallLogModel>>, response: Response<List<CallLogModel>>
                ) {
                    Log.d(tag,"Retrofit Succeeded!")
                    Log.d(tag,response.message())
                }
            })

有专家可以帮助我吗?

我的模型班:

@Entity(tableName = "supportCallLog")
data class CallLogModel(
@SerializedName("Name")
val userName: String,
@SerializedName("phoneNumber")
val userPhone: String,
@SerializedName("Number")
val customerPhone: String,
@SerializedName("Time")
val callDuration: String,
@SerializedName("Type")
val callType: Int,
@SerializedName("Date")
val callDate: String,
var isDataSent : Boolean
){
@PrimaryKey(autoGenerate = true)
var id : Int = 0
 }

我的改装界面:

interface RetrofitService {
@POST("api")
fun postCallModel(@Body callLogModel: List<CallLogModel>) : Call<List<CallLogModel>>
   }

2 个答案:

答案 0 :(得分:0)

您的POST是正确的,这就是为什么您获得200的原因。但是问题出在服务器的响应中。它期望array但得到object,从而导致此错误。

答案 1 :(得分:0)

我在@CommonsWare的帮助下解决了该问题。我正在发布json,但我必须处理来自Web服务的响应。 Web服务返回String。所以我更改了我的postCallModel()的返回类型

旧的返回类型是这样的:

Call<List<CallLogModel>>

我将其更改为:

Call<Any>

现在,我不必担心Web服务返回哪种类型的响应。