这个表达式是否可以通过 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
的列表,它没有任何动态类型。
我认为您导入了错误的包,也许您导入了 Okhttp
的 Response
而不是 Response data class
,因为 OkHttp
的 Response
不想要类型参数。
同时你的回复有点奇怪,你的回复class不需要类型参数。您的回复应该类似于
fun getMovies(): Single<Response>
而不是
fun getMovies(): Single<Response<List<Result>>>
我认为它变成这样是因为您混淆了需要类型参数 [Response<T>]
的 Retrofit
的 Response
和不需要类型参数的响应数据 class .
推荐
我觉得如果你的Response
class有点像
会更好
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 了,以后管理或修复也更方便。
在之前的问题中,一些用户评论说访问嵌套数组是可能的:
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
的列表,它没有任何动态类型。
我认为您导入了错误的包,也许您导入了 Okhttp
的 Response
而不是 Response data class
,因为 OkHttp
的 Response
不想要类型参数。
同时你的回复有点奇怪,你的回复class不需要类型参数。您的回复应该类似于
fun getMovies(): Single<Response>
而不是
fun getMovies(): Single<Response<List<Result>>>
我认为它变成这样是因为您混淆了需要类型参数 [Response<T>]
的 Retrofit
的 Response
和不需要类型参数的响应数据 class .
推荐
我觉得如果你的Response
class有点像
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 了,以后管理或修复也更方便。