android - Android:得到响应“200 ok”但改造失败
问题描述
我正在使用 Retrofit2 发布 JSON 数组,但是当我发布它时,我得到“200 Ok”响应并调用改造的 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>>
}
解决方案
我在@CommonsWare 的帮助下解决了这个问题。我正在发布 json,但我必须处理来自 Web 服务的响应。Web 服务返回字符串。所以我改变了我的 postCallModel() 的返回类型
旧的返回类型是这样的:
Call<List<CallLogModel>>
我将其更改为:
Call<Any>
现在我不必担心 Web 服务返回的响应类型。
推荐阅读
- multithreading - 为什么 Rust 互斥锁似乎没有将锁给最后想要锁定它的线程?
- mysql - MYSql 社区版是否支持 Nosql
- verilog - Quartus II 上使用 Verilog 的寄存器的奇怪行为
- datetime - 如何不从设备而是从互联网获取时间?
- python - Python - 存储在变量中的字符串显示为元组
- java - 使用recyclerview时如何避免等待服务器数据的时间过长
- excel - 如何根据收到的时间和主题行在新邮件中保存 Excel 附件?
- python - 如何为作为 Kubernetes 容器运行的 Flask HTTP 服务器实现 HTTPS 支持
- node.js - 在库中提供可扩展的 Typescript 接口
- python - 如何在烧瓶中调试重定向循环