gpt4 book ai didi

android - 你如何让 Idling 资源在 Kotlin 中与协程一起工作

转载 作者:行者123 更新时间:2023-11-29 01:07:43 25 4
gpt4 key购买 nike

我的 Espresso Idling 资源不工作 - 它编译并运行但不再等待足够长的时间以从“网络”返回结果。


  1. https://github.com/chiuki/espresso-samples/tree/master/idling-resource-okhttp 开始
  2. 将主要 Activity 转换为 Kotlin - 测试(仍在 java 中)仍然适用于 OKHttpIdlingResource
  3. 转换为 anko 协程调用而不是 retrofit.enqueue - 测试不再有效。

这是 MainActivity 的完整新代码

import android.app.Activity
import android.os.Bundle
import android.widget.TextView
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.async
import org.jetbrains.anko.coroutines.experimental.bg

import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory

class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
doCallAsync()
}

private fun doCallAsync() = async(UI) {

val user = bg { getUser() }
val name = user.await().name
val nameView = findViewById(R.id.name) as TextView

nameView.text = name;

}

private fun getUser(): User {

val retrofit = Retrofit.Builder()
.baseUrl("https://api.github.com/")
.addConverterFactory(MoshiConverterFactory.create())
.client(OkHttpProvider.getOkHttpInstance())
.build()

val service = retrofit.create(GitHubService::class.java)


val response = service.getUser("chiuki").execute().body()

return response!!

}
}

最佳答案

转换为 anko 协程调用而不是 retrofit.enqueue - 测试不再有效。

retrofit.enqueue 使用 OkHttp 的调度程序。这是“idling-resource-okhttp”识别并与 idlingresource 管理器通信的内容。

然而,通过使用 retrofit.execute 和 anko 的 bg,您正在使用 idlingresource 管理器不知道的不同执行机制,因此虽然它可能正在执行应用程序从经理的角度来看是空闲的,因此结束了测试。

要解决此问题,您需要为 bg 使用的任何执行机制注册一个 IdlingResource,以便它可以识别该执行线程何时发生某些事情。

关于android - 你如何让 Idling 资源在 Kotlin 中与协程一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45682582/

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