我有个愚蠢的问题……但我找不到情报。
我已经创建了一个Repository.kt,它使用Co-例程
守则如下:
override suspend fun getChallenge(): AwsResult<String> {
return awsApi.getChallenge()
}AwsAPI部分如下所示:
override suspend fun getChallenge(): AwsResult<String> {
....
return withContext(Dispatchers.IO) {
try {
val reponse: ... => API call through SDK
AwsResult.onSuccess(reponse.text)
} catch (e: Exception) {
AwsResult.onError(e)
}
}
}我已经创建了一个ChallengeUseCase.kt,它将在将结果发送回ViewModel之前包含一些逻辑缺陷。
suspend fun registerDevice(): Result<String> {
try {
val result = repository.getChallenge()
} catch (e: Exception) {
}
}AwsResult看起来是这样的:
sealed class AwsResult<out R> {
data class onSuccess<out T>(val data: T) : AwsResult<T>()
data class onError(val exception: Exception) : AwsResult<Nothing>()
}我想知道如何在用例文件中捕获AwsResult?目标是提取一个信息,对它做一些事情,并将实现的业务逻辑的结果发送回viewModel。我假设result不会立即包含这些信息,而且我可能必须定义一个范围或围绕它的什么东西。
当我说,假设结果不会立即包含信息时,这是因为我试图在onSuccess和onResult中捕获UseCase.kt。
知道吗?
发布于 2022-06-09 19:08:07
您可以使用onSuccess运算符提取onError或onError,并检查返回的result的类型。
suspend fun registerDevice(): Result<String> {
try {
val result: AwsResult<String> = repository.getChallenge()
when (result) {
is AwsResult.onSuccess -> {
val data = result.data
// ... do something when request is success
}
is AwsResult.onError -> {
val exception = result.exception
// ... do something when request is error
}
}
} catch (e: Exception) {
}
}另外,我不建议用一个小字母来命名Kotlin类,好的方式是用一个大字母来命名类:
sealed class AwsResult<out R> {
data class Success<out T>(val data: T) : AwsResult<T>()
data class Error(val exception: Exception) : AwsResult<Nothing>()
}https://stackoverflow.com/questions/72555544
复制相似问题