使用 Moshi 从 Retrofit 调用中得不到任何结果

Getting no result from Retrofit call using Moshi

我是 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>
)

感谢您的帮助!

API 未返回 json 数组,但您正尝试将其解析为 List<> 类型。

API returns 似乎是一个 GeoJSON FeatureCollection 对象,其 features 属性 中包含地震数组,所以您的顶级 json 模型 class 应该至少可以提取 features 数组。