首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建OkHttp所需的虚拟OkHttp对象?

如何创建OkHttp所需的虚拟OkHttp对象?
EN

Stack Overflow用户
提问于 2022-03-08 10:28:36
回答 4查看 1K关注 0票数 1

我现在正在通过null,这会导致崩溃!

请参阅:val response: Response<ReviewResponse> = Response.error(-1, null)

代码:

代码语言:javascript
复制
suspend fun getReviewData() = getResult {
        try {
            apiService.getReviewData(getCustomerId())
        } catch (e: Exception) {
            val response: Response<ReviewResponse> = Response.error(-1, null)
            response
        }
    }

如您所见,null在内部不接受,我必须传递以下内容:ResponseBody body

EN

回答 4

Stack Overflow用户

发布于 2022-03-16 09:40:32

您可以创建这样的结果数据类

代码语言:javascript
复制
 data class ApiResult<out T>(
    val status: Status,
    val data: T?,
    val error: Throwable?,
    val message: String?
) {

    enum class Status {
        SUCCESS,
        ERROR,
        LOADING
    }

    companion object {
        fun <T> success(data: T?): ApiResult<T> {
            return ApiResult(Status.SUCCESS, data, null, null)
        }

        fun <T> error(message: String, error: Throwable?): ApiResult<T> {
            return ApiResult(Status.ERROR, null, error, message)
        }

        fun <T> loading(data: T? = null): ApiResult<T> {
            return ApiResult(Status.LOADING, data, null, null)
        }
    }

    override fun toString(): String {
        return "Result(status=$status, data=$data, error=$error, message=$message)"
    }
}

然后像这样创建自定义基本响应

代码语言:javascript
复制
 data class CommonResponse<T>(
    @SerializedName("error") val error: Boolean,
    @SerializedName("status") val status: Int,
    @SerializedName("message") val message: String?,
    @SerializedName("response") val response: T?
)

然后像这样在改造中分配给他们

代码语言:javascript
复制
suspend fun <T> getResponse(
        request: suspend () -> Response<T>
    ): ApiResult<T> {
        return try {
            val result = request.invoke()
            if (result.isSuccessful) {
                return ApiResult.success(result.body())
            } else {

                ApiResult.error("Error", null)
            }
        } catch (e: Throwable) {
            ApiResult.error("Unkown Error", e)
        }
    }

像这样在电话里使用

代码语言:javascript
复制
interface CheckWhereApi {
    //Check Where API
    @GET("url")
    suspend fun checkWhere(): Response<CommonResponse<MyModel>>
}
票数 1
EN

Stack Overflow用户

发布于 2022-03-16 15:50:48

那这个呢?

代码语言:javascript
复制
Response.error(404, ResponseBody.create(null, "Not found response body"))
票数 1
EN

Stack Overflow用户

发布于 2022-03-11 06:41:37

依赖于需要的addBody()函数,这里没有传递任何param。需要通过对讲机。

看起来就像您缺少的代码中的api构造。请按照链接了解更多信息- https://www.chillcoding.com/android-retrofit-send-http/

++更新取决于您的评论我认为您没有得到直接的答复,我没有给出直接的回答,它取决于您所遵循的确切架构。更多的信息java.lang.IllegalArgumentException:代码< 400:-1它的定义架构。

代码语言:javascript
复制
 if (code < 400) throw new IllegalArgumentException("code < 400: " + code);

这里我建议您如何返回结果--这很复杂,您可以尝试使用一些具有错误句柄和成功句柄的自定义类。

代码语言:javascript
复制
data class ResponseByApi(val success: Any, val code: Int, val 
error : Any)

根据网络响应创建响应模型类和设置值,如成功集、成功正文和代码(如果失败则设置错误体),代码->按响应返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71393447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档