安卓:获得响应"200 ok"但改造失败



我正在使用 Retrofit2 发布 JSON 数组,但当我发布它时,我得到"200 Ok"响应并调用 retrofit 的 onFailed 方法。它说"预期BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处是字符串"

我是否成功地将 JSON 发送到 Web 服务?如果成功了,那么为什么改造失败了? 我的 JSON 数组是这样的:

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

我已经用邮递员测试了 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>>
}

你的POST是正确的,这就是你得到 200 的原因。但是问题出在服务器的响应中。它期望array但得到object,这会导致此错误。

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

旧的返回类型是这样的:

Call<List<CallLogModel>>

我把它改成:

Call<Any>

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

相关内容

  • 没有找到相关文章