使用 Moshi 从 Retrofit 调用中没有得到任何结果
Posted
技术标签:
【中文标题】使用 Moshi 从 Retrofit 调用中没有得到任何结果【英文标题】:Getting no result from Retrofit call using Moshi 【发布时间】:2021-10-25 12:06:24 【问题描述】:我是 API 世界的新手。在尝试使用 Retrofit 和 Moshi 获取 API 时,看起来我得到了 0 个结果,这是我不应该的。谁能告诉我我做错了什么设置?
编辑:经过进一步调查,我实际上在调用 API 的视图模型中遇到了这个错误:
Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $
我正在尝试获取的 API:
https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2021-01-01&endtime=2021-08-24&minmagnitude=4&latitude=24.0162182&longitude=90.6402874&maxradiuskm=400
这是我的 Retrofit 和 Moshi 设置:
private const val BASE_URL = "https://earthquake.usgs.gov/"
private val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
private val retrofit = Retrofit.Builder()
.addConverterFactory(MoshiConverterFactory.create(moshi))
.baseUrl(BASE_URL)
.build()
interface UsgsApiService
@GET("fdsnws/event/1/query")
suspend fun getQuakes(
@Query("format") format: String = "geojson",
@Query("starttime") starttime: String = "2021-01-01",
@Query("endtime") endtime: String = "2021-08-24",
@Query("minmagnitude") minmagnitude: String = "4",
@Query("latitude") latitude: String = "24.0162182",
@Query("longitude") longitude: String = "90.6402874",
@Query("maxradiuskm") maxradiuskm: String = "400"
): List<Quake>
object UsgsApi
val retrofitService: UsgsApiService by lazy
retrofit.create(UsgsApiService::class.java)
这是我的模型:
@JsonClass(generateAdapter = true)
data class Quake(
@Json(name = "features")
val features: List<Feature>
)
@JsonClass(generateAdapter = true)
data class Feature(
@Json(name = "id")
val id: String,
@Json(name = "properties")
val properties: Properties,
@Json(name = "geometry")
val geometry: Geometry
)
@JsonClass(generateAdapter = true)
data class Properties(
@Json(name = "mag")
val mag: Double?,
@Json(name = "place")
val place: String,
@Json(name = "time")
val time: Long,
@Json(name = "url")
val url: String
)
@JsonClass(generateAdapter = true)
data class Geometry(
@Json(name = "coordinates")
val coordinates: List<Double>
)
感谢您的帮助!
【问题讨论】:
【参考方案1】:API 未返回 json 数组,但您尝试将其解析为具有 List<>
类型的数组。
API 返回的似乎是一个 GeoJSON FeatureCollection 对象,其 features
属性中包含地震数组,因此您的*** json 模型类应该是至少可以提取 features
数组的东西。
【讨论】:
谢谢!你能给我一个如何解决这个问题的例子吗?我是 Retrofit 的新手,不知道如何修复它。 没关系!将List<Quake>
更改为Quake
作为返回类型,我现在得到了结果。感谢您的帮助!以上是关于使用 Moshi 从 Retrofit 调用中没有得到任何结果的主要内容,如果未能解决你的问题,请参考以下文章
使用 Moshi 和 Retrofit 将响应包装在另一个对象中
Moshi + Retrofit - 处理未知类型的 JSON 响应
使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组