Android studio 3.5在我的项目中,我使用了改造和Kotlin。 我想要Kotlin协程的下一步:

  1. 通过改造开始第一个http请求。
  2. 仅在成功完成后,才通过改造启动第二个http请求。
  3. 如果第一个请求失败,则不要启动第二个请求。

Kotlin协程可以做到这一点吗?

谢谢。

#1楼 票数:2 已采纳

是的,它与协程完全可行:

interface MyApi{
    @GET
    suspend fun firstRequest(): Response<FirstRequestResonseObject>
    @GET
    suspend fun secondRequest(): Response<SecondRequestResponseObject>
}

现在,调用:

coroutineScope.launch{
  //Start first http request by retrofit.
  val firstRequest = api.getFirstRequest()
  if(firstRequest.isSuccessFul){
    //Only after success finish then start second http request by retrofit.
    val secondRequest = api.getSecondRequest()
  }
 //If first request fail then NOT start second request.
}

但是,您可能想考虑自己的例外情况:

val coroutineExceptionHandler = CoroutineExceptionHandler{_, throwable -> throwable.printStackTrace()
}

接着:

coroutineScope.launch(coroutineExceptionHandler ){
      val firstRequest = api.getFirstRequest()
      if(firstRequest.isSuccessFul){
        val secondRequest = api.getSecondRequest()
      }
    }

做完了!

对于这种方法,您必须安装2.6或更高版本。 否则,您的响应应为Deferred<Response<FirstResponseObject>>和请求api.getFirstRequest().await()

  ask by a_subscriber translate from so

未解决问题?本站智能推荐:

2回复

使用协程在api请求之前从房间数据库加载数据

我需要实现以下逻辑。 当应用程序启动时,从共享首选项加载 userId,然后从 Room 数据库加载用户对象,最终能够使用来自用户对象的访问令牌发出 Retrofit 请求。 这是我目前的情况。 在应用程序启动时使用 Dagger 初始化用户存储库 从 sharedPrefs 加载userId ,然
1回复

Kotlin协程等待改造响应

我正在尝试将 Android MVVM模式与存储库类和Retrofit用于网络调用。 我有一个常见的问题,我无法让协程等待网络响应返回。 这个方法在我的ViewModel类中: 在ConfigModelRepository ,我有这个: 我的代码运行到dataService.config()为止。
2回复

需要帮助实现协程,需要等待api响应

我的问题看起来很简单,但不知何故我无法让它工作。 我想在 api 响应后等待数组被填充。 启动 api 请求 下一个功能 改造客户端 得到空结果 如何正确使用 corroutines? 我希望在数组填充数据后显示日志。
1回复

在协程和改造中使用延迟时的UniTestviewModel

我想为我的 viewModel 类编写一个 unitTest : 我收到以下异常: 这是我的 RemoteDataSource 类: 当我们使用Rxjava我们可以像这样简单地创建一个 Observable: 协程中的Deferred怎么样? 我如何测试我的方法:
1回复

android没有进入协程

下午好,我遇到了以下问题:我正在尝试获取商店列表,但我的响应为 null。 从 debag 来看,它甚至没有进入DataAccessStrategy 中的协程。 应用程序中其他地方的一段类似代码有效,我无法弄清楚问题是什么。 登录视图模型 数据访问策略 OdredsRepository 订单远程数
1回复

当我使用协程时,Kotlin找不到类

我有下一个存储库实体: 和Repository.kt : 但是当我尝试构建我的应用程序时出现错误: 这是我的build.gradle : 为什么我会收到这个错误? 我的代码有什么问题? Android Studio不会突出显示任何错误。 UPD 在我从User删除fullName属性后,一切都开
1回复

用协程测试改造

如何使用Retrofit和Coroutines正确测试Http请求/响应? 我正在使用最新的Retrofit版本: 2.6.0 ,该版本具有对suspend函数的支持。 编辑 我还提供了一些易于实现的代码: ApiInterface 一些仓库 在ViewModel上的实现
2回复

Retrofit中从AsyncTask到协程的转换:IllegalArgumentException

在对从AsyncTask (之前)到Kotlin Coroutines (之后)的转换进行最小更改时,我不断收到错误IllegalArgumentException 。 请注意,代码与AsyncTask一起按预期工作。 注意:Retrofit 正在调用我自己的.php脚本,该脚本返回一些以json字