【问题标题】:Parse model from data object从数据对象解析模型
【发布时间】:2022-01-24 23:11:00
【问题描述】:

我的 API 返回如下所示的响应:

{
    status: number,
    message?: string,
    data?: T,
}

所以在改造服务中,我必须将所有返回值包装在这个响应类中:

data class Response<T>(val status: Int, val message: String?, val data: T?)

interface MyService {
    @GET("user")
    suspend fun getUser(id: String): Response<User>
}

现在的问题是:如何在不包装返回值的情况下让它返回一个类?

suspend fun getUser(id: String): User

【问题讨论】:

    标签: android kotlin retrofit2


    【解决方案1】:

    您制作界面的方式必须让多个函数返回多个返回对象。 尝试制作一个通用响应接口,然后在您的代码中处理响应。让你的界面像这样:

    @GET
    suspend fun getUser(@Url endpoint: String,id: String): Call<ResponseBody>
    

    然后在你的响应函数中使用它:

    override fun onResponse(call : Call<ResponseBody>,response: Response<ResponseBody>) {
            //Parse your object here
            String responseBody = response.body().string();
            JSONObject json = new JSONObject(responseBody);
            val responseObject : User = Gson().fromJson(
                        json.optJSONObject("data")?.toString(),
                        User::class.java)
        }
    

    确保在您的应用 gradle 中实现 Gson。

    【讨论】:

      【解决方案2】:

      您可以使用 Retrofit 的 CallAdapterCallAdapter.Factory 调整返回类型。了解这一点应该可以帮助您在网上找到一些代码示例,您可以根据自己的具体用例进行调整。

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 2016-02-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        相关资源
        最近更新 更多