需要帮助实现协程,需要等待 api 响应
Need help implementing coroutines, need to wait for the api response
我的问题看起来很简单,但不知何故无法解决。我想在 api 响应后等待数组被填充。
开始 api 请求
val job = GlobalScope.launch(IO) {
result = viewModel.getJsonFile()!!
}
runBlocking {
job.join()
Log.e("result", result.toString()) } }
}
下一功能
suspend fun getJsonFile(): ArrayList<String>? {
return RetrofitClient.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)
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
如何正确使用协程?我希望在数组填充数据后显示日志。
从您的 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}
您可以使用myTitles(实时数据)进行观察
myTitle.observe(viewLifecycleOwner, {
……
})
我的问题看起来很简单,但不知何故无法解决。我想在 api 响应后等待数组被填充。
开始 api 请求
val job = GlobalScope.launch(IO) {
result = viewModel.getJsonFile()!!
}
runBlocking {
job.join()
Log.e("result", result.toString()) } }
}
下一功能
suspend fun getJsonFile(): ArrayList<String>? {
return RetrofitClient.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)
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
如何正确使用协程?我希望在数组填充数据后显示日志。
从您的 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}
您可以使用myTitles(实时数据)进行观察 myTitle.observe(viewLifecycleOwner, { …… })