【发布时间】:2020-10-19 10:33:48
【问题描述】:
我知道这个问题还有其他一些主题,但我找不到我的错误的解决方案,所以如果您有任何建议,请告诉我。我正在尝试在正文中创建一个带有参数的 POST 请求,以从 API 中检索一些数据。
我的 DataApi 界面:
interface ChartsDataApi {
@POST(NetworkUtils.CASH_COLLECTION_URL)
fun getCashCollection(@Body guid: String) : Call<List<CashCollection>>
@POST(NetworkUtils.TICKETS_DETAILS_URL)
fun getTicketsDetails() : Call<List<TicketDetails>>
}
我在使用 Retrofit 和试图获得响应的地方很有趣:
private fun geCashCollectionDetails(){
var params : MutableMap<String, String> = HashMap()
val BASE_URL = " here i wrote the base URL "
val gson = GsonBuilder()
.setLenient()
.create()
val api = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()
.create(ChartsDataApi::class.java)
GlobalScope.launch(Dispatchers.IO){
val response = api.getCashCollection(" **here i wrote the guid** ").awaitResponse()
if(response.isSuccessful){
val day = response.body()!!.lastIndex
Log.d("RAZZ", day.toString())
withContext(Dispatchers.Main){
}
}
}
我的 CashCollection 数据类:
data class CashCollection(
@SerializedName("label")
val label: String?,
@SerializedName("value")
val value: String?)
来自服务器的响应: {"data":[{"label":"12.10.2020","value":"0,00"},{"label":"16.10.2020","value":"0,00 "},{"label":"17.10.2020","value":"0,00"},{"label":"18.10.2020","value":"0,00"}],"货币":"欧元"}
Process: com.eschbachit.citylinemobile, PID: 32529
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:174)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:776)
当我尝试测试和检查收到的数据时,我收到了该错误。
【问题讨论】:
标签: android kotlin post request retrofit2