gpt4 book ai didi

android - 使用Android Clean Architecture处理来自API的错误和成功响应

转载 作者:行者123 更新时间:2023-12-02 12:56:18 25 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现Clean Architecture。我的API在成功和失败案例中发送的响应如下:

{
"data": [],
"statusCode": 200,
"statusMessage": "success",
"success": true
}

要么
{
"statusCode": xxx,
"statusMessage": "Invalid Details",
"success": false
}

在以前的方法中,我使用Retrofit和 BaseResponse POJO类来处理数据方案,但是在我当前的应用程序中,我使用带有RxJava和Retrofit的Clean Architecture。

我将获得 可观察的可流动的之一作为响应,但类型为BaseResponse
data class BaseResponse<T>(
@SerializedName("status") val status: Boolean,
@SerializedName("statuscode") val statusCode: Int? = null,
@SerializedName("message") val message: String? = null,
@SerializedName("data") val data: T? = null
)

我正在使用自定义RESULT作为所有对象的成功或失败的Rx检查域中的Rx错误:
fun <T> Single<T>.toResult(): Single<Result<T>> = this
.map { Result.Success(it) as Result<T> }
.onErrorReturn {
Result.Failure(
if (it is CompositeException) it.exceptions.last().toView()
else it.toView()
)
}

但是对于处理动态响应,我无法将它们包装起来。

我尝试了在
How to wrap API responses to handle success and error based on Clean Architecture?和其他几个,但都没有解决。

如何将这些项目包装在用例/存储库或数据层中,并将它们传递给表示形式,例如data作为Result.success或statusMessage作为Result.Error

最佳答案

如果JSON响应中的data为null,则可以忽略基本响应中的<T>,并且可以在成功或失败的情况下使用Either<A, B>自定义类。

您可以按照Custom Either中所述创建here

所以在您的存储库中,代码看起来像

fun getMyList(): Single<Either<BaseModel, CustomModel?>> =
apiClient.getList()
.map {
if (it.status.equals("success")) {
Either.Success(it.data?.toEntity())
} else {
Either.Failure(it.toEntity())
}
}

fun <T> BaseResponse<T>.toEntity() = BaseModel(
status = status,
statusCode = statusCode,
message = message
)

CustomResponse.toEntity到CustomModel也是如此,但是您正在执行 Single<T>.toResult(),因此在Presentation层中,您可以像
.subscribe({ result ->
when (result) {
is Result.Success -> result.data.successOrFailure(::hanldeError, ::handleSuccess)
is Result.Failure -> {}
}
},{})

并分别在 hanldeError()handleSuccess()中进行操作

关于android - 使用Android Clean Architecture处理来自API的错误和成功响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61982623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com