【发布时间】:2018-12-04 21:35:24
【问题描述】:
我在这里遇到了一个奇怪的问题(Kotlin 和协程的新手)。我正在修改函数 getMovies 中的类变量。在启动块中,我得到一个 JSON,然后我通过 GSON 运行它并得到一个可变的电影信息条目列表。您可以从 Anko 看到 2 个显示 Toast 的 longToast,但第一个显示 20,另一个显示 0。这是为什么呢? Android Studio 不会抛出任何错误,我引用的是同一个 moviesList 变量。我在互联网上尝试了许多博客和说明,但找不到任何有用的东西。任何帮助将不胜感激!
class MainActivity : Activity() {
private var moviesList: MutableList<Movie> = mutableListOf()
fun getMovies() {
launch(UI){
val result = async(CommonPool){
getResponseJSON()
}.await()
moviesList = Gson().fromJson(result, MovieDBResponse::class.java).results
longToast(moviesList.size.toString())
}
longToast(moviesList.size.toString())
}
}
【问题讨论】:
-
你确定 first 吐司真的显示
20吗?也许尝试写入日志以确保顺序。 -
你还在使用实验性协程 API 吗?是时候升级到 Kotlin 1.3 了。另外,不要使用
async-await,这是一种反模式。请改用withContext(Dispatchers.IO)。 -
@MichaelButscher 是的,第一个肯定显示 20。我尝试了日志,但由于某种原因它们没有显示。
-
@MarkoTopolnik 嗯,会尝试的。任何有用的链接?谢谢!
标签: android kotlin kotlin-coroutines