Moshi:预期 BEGIN_ARRAY 但在路径 BEGIN_OBJECT

Moshi: Expected BEGIN_ARRAY but was BEGIN_OBJECT at path

我从 Moshi 得到以下错误:Expected BEGIN_ARRAY but was BEGIN_OBJECT at path 这是我的界面:

interface ApiService {
    @GET("movie/popular")
    suspend fun getTopRatedMovies(
        @Query("api_key") apiKey: String = BuildConfig.API_KEY,
        @Query("page") page: Int = 1
    ): List<TopRatedMovies>

数据class

data class TopRatedMovies(
    @Json(name = "title") val title: String,
    @Json(name = "poster_path") val posterPath: String,
)

响应如下所示:

我知道还有其他一些标题相同的问题,但这些问题对我没有帮助。

根据函数的 return 类型 (List<TopRatedMovies>),Moshi 期望您的 API 到 return 一个列表,但它是 returning 一个对象({"page": ..., "results": [...]}) 代替。

要处理此问题,您可以创建一个 TopRatedMoviesPage class,如下所示:

data class TopRatedMoviesPage(
    @Json(name = "page") val page: Int,
    @Json(name = "results") val results: List<TopRatedMovies>,
)

并将您的 API 定义更改为:

@GET("movie/popular")
suspend fun getTopRatedMovies(
    @Query("api_key") apiKey: String = BuildConfig.API_KEY,
    @Query("page") page: Int = 1
): TopRatedMoviesPage