代码之家  ›  专栏  ›  技术社区  ›  N Sharma

gson未将值与kotlin中的数据类映射

  •  0
  • N Sharma  · 技术社区  · 7 年前

    嗨,我在用 gson 将响应值映射到模型的库。我是这样做的,但它不是将响应值映射到模型。我得到了50个模型的列表,但其中的值为零。

    @Provides
    @Singleton
    fun provideRestApiHelper(
            okHttpClient: OkHttpClient,
            gson: Gson,
            rxJava2CallAdapterFactory: RxJava2CallAdapterFactory): RestApi {
        val builder = Retrofit.Builder()
                .baseUrl(BuildConfig.BASE_URL)
                .addCallAdapterFactory(rxJava2CallAdapterFactory)
                .addConverterFactory(GsonConverterFactory.create(gson))
        val retrofit = builder.client(okHttpClient).build()
        return retrofit.create(RestApi::class.java)
    }
    

    雷斯塔皮

    interface RestApi {
    
        @GET(ApiEndPoint.ENDPOINT_GITHUB_JOBS)
        fun getJobsApiCall(): Observable<List<JobsResponse>>
    }
    

    ApihelperImpl.kt公司

    class ApiHelperImpl @Inject constructor(private val restApi: RestApi) : ApiHelper {
    
        override fun getJobsApiCall(): Observable<List<JobsResponse>> {
            return restApi.getJobsApiCall()
        }
    }
    

    工作响应.kt

    data class JobsResponse(
    
            @field:SerializedName("company_logo")
            val companyLogo: String?,
    
            @field:SerializedName("how_to_apply")
            val howToApply: String?,
    
            @field:SerializedName("created_at")
            val createdAt: String?,
    
            @field:SerializedName("description")
            val description: String?,
    
            @field:SerializedName("location")
            val location: String?,
    
            @field:SerializedName("company")
            val company: String?,
    
            @field:SerializedName("company_url")
            val companyUrl: String?,
    
            @field:SerializedName("id")
            val id: String?,
    
            @field:SerializedName("title")
            val title: String?,
    
            @field:SerializedName("type")
            val type: String?,
    
            @field:SerializedName("url")
            val url: String?
    ) : BaseResponse()
    

    我正在调用这个api https://jobs.github.com/positions.json . 有人知道会有什么问题吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ege Kuzubasioglu Paresh P.    7 年前

    这是因为您依赖于自动转换的Java代码。

    去除 @field:SerializedName 改成了 @SerializedName

    别把它们放进去 primary constructor

    定义如下:

    data class JobsResponse(){
    @SerializedName("company_logo")
    @Expose
    val companyLogo: String? = null
    
    
    ....
    
    }