这个表达式是否可以通过 Retrofit 获得嵌套数组?

Is this expression to get a nested array possible with Retrofit?

在之前的问题中,一些用户评论说访问嵌套数组是可能的:

fun getMovies(): Single<Response<List<Result>>>

但每次我尝试实现它时,它都会给我错误消息:

No type arguments expected for class Response

这是我的模特Class:

data class Response(
   val page: Int?,
   val total_results: Int?,
   val total_pages: Int?,
   val results: List<Result>
) {
   //@Entity
   data class Result(
       val popularity: Double?,
       val vote_count: Int?,
       val video: Boolean?,
       val poster_path: String?,
       val id: Int?,
       val adult: Boolean?,
       val backdrop_path: String?,
       val original_language: String?,
       val original_title: String?,
       val genre_ids: List<Int>?,
       val title: String?,
       val vote_average: Double?,
       val overview: String?,
       val release_date: String?
   )
}

我的Api界面


package com.example.moviesapplication.model

import io.reactivex.Single
import retrofit2.http.GET

interface MoviesApi {
   @GET("/3/discover/movie?api_key=${apiKey}&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1")
   fun getMovies():  Single<List<Response.Result>>
}

因此,如果有人知道所陈述的表达式是否可能或类似的东西,请告诉我。

您的 Response class 没有任何通用参数,这就是错误所指出的。

您可以 return Single<Response> 并且数组将始终是 Result 的列表,它没有任何动态类型。

我认为您导入了错误的包,也许您导入了 OkhttpResponse 而不是 Response data class,因为 OkHttpResponse 不想要类型参数。

同时你的回复有点奇怪,你的回复class不需要类型参数。您的回复应该类似于

fun getMovies():  Single<Response>

而不是

fun getMovies():  Single<Response<List<Result>>>

我认为它变成这样是因为您混淆了需要类型参数 [Response<T>]RetrofitResponse 和不需要类型参数的响应数据 class .


推荐

我觉得如果你的Responseclass有点像

会更好
data class Response<T>(
    val page: Int?,
    val total_results: Int?,
    val total_pages: Int?,
    val results: List<T> // or val results: T
)

因为如果你有很多 pf 响应有像 Response class 这样的 Base 但是,它的结果有不同的模型或列表(像 List<ResultMovie>List<...>) .您只需要像 Response<Result> 一样将 T 传递给您的 Base 模型。有了这样的 Base model 就不用再重复声明 Response 了,以后管理或修复也更方便。