Kotlin Retrofit Moshi:不返回任何内容
Posted
技术标签:
【中文标题】Kotlin Retrofit Moshi:不返回任何内容【英文标题】:Kotlin Retrofit Moshi: returns nothing 【发布时间】:2021-06-05 16:24:48 【问题描述】:问题:
我需要解析下图,JSON,我使用Retrofit,Moshi,Kotlin,我使用数据类作为占位符,我将结果输出到LogCat,但是什么都没有输出。
JSON
persons:[
"name": "Christian",
"age": 5
,
"name": "Marcus",
"age": 10
,
"name": "Norman",
"age": 20
]
数据类
data class Persons(
@Json(name = "name") val name: String,
@Json(name = "age") val age: Int
)
API 服务
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.baseUrl(BASE_URL)
.build()
interface PersonApiService
@GET(ADDITIONAL_URL)
fun getPersons(): Call<Persons>
object PersonApi
val retrofitService: PersonApiService by lazy
retrofit.create(PersonApiService::class.java)
响应
override fun onResponse(call: Call<Persons>, response: Response<Persons>)
Log.i(TAG, "onResponse: $response.body()") // RETURNS NOTHING
【问题讨论】:
【参考方案1】:解决方案:
阅读this article,你就会明白一切。
一点理论:
记住并学会区分两种 Json:嵌套 JSON 对象 | JSON 对象数组
Nested JSON Objecs: | Array of JSON Objects
|
|
persons:[ | [
|
"name": "Christian", | "name": "Christian",
"age": 5 | "age": 5
, | ,
|
"name": "Marcus", | "name": "Marcus",
"age": 10 | "age": 10
, | ,
|
"name": "Norman", | "name": "Norman",
"age": 20 | "age": 20
|
] | ]
如果您的 JSON 采用(JSON 对象数组)格式,您的实现将适合|
嵌套 JSON 对象的数据类
data class Persons(
@Json(name = "persons") val persons: List<PersonProperty>
)
data class PersonProperty(
@Json(name = "name") val name: String,
@Json(name = "age") val age: Int
)
响应
override fun onResponse(call: Call<Persons>, response: Response<Persons>)
Log.i(TAG, "onResponse: $response.body()") // RETURNS List Persons
PS。 Vel_daN:喜欢什么你做。
【讨论】:
以上是关于Kotlin Retrofit Moshi:不返回任何内容的主要内容,如果未能解决你的问题,请参考以下文章
使用 Moshi 从 Retrofit 调用中没有得到任何结果
Moshi + Retrofit - 处理未知类型的 JSON 响应
使用 Moshi 和 Retrofit 将响应包装在另一个对象中
使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组