Android 需要帮助实现协同路由,需要等待api响应

Android 需要帮助实现协同路由,需要等待api响应,android,retrofit,retrofit2,kotlin-coroutines,Android,Retrofit,Retrofit2,Kotlin Coroutines,我的问题似乎很简单,但不知怎么的,我无法让它工作。我想等待api响应后填充数组 启动api请求 val job = GlobalScope.launch(IO) { result = viewModel.getJsonFile()!! } runBlocking { job.join() Log.e("result", result.toString())

我的问题似乎很简单,但不知怎么的,我无法让它工作。我想等待api响应后填充数组

启动api请求

        val job = GlobalScope.launch(IO) {
            result = viewModel.getJsonFile()!!
        }
        runBlocking {
            job.join()
            Log.e("result", result.toString()) } }
        }
suspend fun createClient(): ArrayList<String> {
        val url = "https://jobconcursosbr.com/"
        val api = Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(APIrequests::class.java)
        GlobalScope.launch ( Dispatchers.IO ) {
            val response = api.getTextData()
            if (response.isSuccessful) {
                myTitles.clear()
                for (item in response.body()!!) {
                    myTitles.add(response.body()!![i].title.rendered)
                    Log.e("meusTitulos", myTitles[i])
                    minhaDescricao.add(response.body()!![i].content.rendered)
                    i++
            }
        }
    }
        return myTitles}
2021-04-03 16:19:40.659 9484-9484/com.example.noticiasconcursos E/result: []
2021-04-03 16:19:43.435 9484-9546/com.example.noticiasconcursos E/meusTitulos: Processo Seletivo iNova Capixaba tem 877 vagas em vários níveis
2021-04-03 16:19:43.436 9484-9546/com.example.noticiasconcursos E/meusTitulos: ESPM disponibiliza cursos gratuitos online com certificado
2021-04-03 16:19:43.436 9484-9546/com.example.noticiasconcursos E/meusTitulos: IFPR disponibiliza cursos gratuitos de inglês básico e intermediário online
2021-04-03 16:19:43.436 9484-9546/com.example.noticiasconcursos E/meusTitulos: Senar oferece 40 cursos gratuitos de capacitação na região norte de SC
下一个功能

suspend fun getJsonFile(): ArrayList<String>? {
        return RetrofitClient.createClient()
    }

如何正确使用腐蚀剂?我希望在数组充满数据后显示日志。

从createClient函数中删除协同路由作用域

 suspend fun createClient(): ArrayList<String> {
        val url = "https://jobconcursosbr.com/"
        val api = Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(APIrequests::class.java)
            val response = api.getTextData()
            if (response.isSuccessful) {
                myTitles.clear()
                for (item in response.body()!!) {
                    myTitles.add(response.body()!![i].title.rendered)
                    Log.e("meusTitulos", myTitles[i])
                    minhaDescricao.add(response.body()!![i].content.rendered)
                    i++
            }
    }
        return myTitles}
suspend fun createClient():ArrayList{
val url=”https://jobconcursosbr.com/"
val api=reformation.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(APIrequests::class.java)
val response=api.getTextData()
if(response.issucessful){
myTitles.clear()
对于(响应中的项。body()!!){
myTitles.add(response.body()!![i].title.rendered)
Log.e(“Meustulos”,myTitles[i])
添加(response.body()!![i].content.rendered)
我++
}
}
返回myTitles}

您可以使用myTitles(实时数据)进行观察 myTitle.observe(查看生命周期所有者{ ......
})

从createClient()中删除了“挂起”,但没有任何更改。。。。仍然得到相同的结果:(不,不要从createClient remove GlobalScope.launch(Dispatchers.IO)中删除挂起,因为在您的代码中,部分api.getTextData()在不同的协同程序上运行,因为它起作用,但是我认为这样做会使我的UI冻结几秒钟……替换这个val job=GlobalScope.launch(IO)使用CoroutineScope(Dispatchers.IO)。lanuchI将这样做,似乎是正确的方法。