使用Retrofit搭配Moshi调用USGS地震接口无结果且类型匹配报错
问题根因
报错Expected BEGIN_ARRAY but was BEGIN_OBJECT at path $的核心原因是接口返回的JSON根节点是对象类型,但是你在UsgsApiService中定义的getQuakes方法返回值为List<Quake>,Moshi解析时预期根节点是数组,与实际返回结构不匹配导致解析失败。
你调用的USGS地震接口返回的GeoJSON格式根结构就是单个对象,你定义的Quake实体类已经通过features字段匹配了根对象下的地震列表属性,完全符合返回结构要求,只需要修改接口返回类型即可。
修改方案
将UsgsApiService中getQuakes方法的返回值从List<Quake>改为Quake,修改后的代码如下:
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" ): Quake }
修改完成后,调用接口拿到Quake对象后,直接取其features属性即可获取全部地震数据列表。
内容的提问来源于stack exchange,提问作者Raw Hasan
相关产品推荐
相关产品推荐

