【发布时间】:2020-01-23 10:59:15
【问题描述】:
我使用 kotlin 开发了一个 android 应用程序。我使用 swagger 来获取我所有的 Web 服务。 如果存在,我想调用 Web 服务并使用 try/catch 处理错误。 经过一段时间的研究,关于如何使用这个 WS,我发现我应该使用协程和 Dispatchers,我使用 GlobalScope 如下:
GlobalScope.launch(Dispatchers.Default) {
val productsType = mobileApi.apiMobileProductTypeGetAllPost(params, 0, 50, "", "")
withContext(Dispatchers.Main) {
viewProductType.loadAllTypeProduct(productsType)}
这是 loadAllTypeProduct 的代码:
override fun loadAllTypeProduct(data: Array<ProductTypeData>) {
recyclerViewProductTypeList.apply {
recyclerViewProductTypeList.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)
recyclerViewProductTypeList.adapter = ProductTypeItemAdapter(data, this@HomeFragment, context)
}
}
但是,我发现我应该使用 Coroutine Scope 而不是 Global Scope 并且 Global Scope 非常不受欢迎。 因此,我将代码从上面的代码更改为以下代码:
val scope = CoroutineScope(Dispatchers.Main)
basicViewInterface.showProgressBar()
val task = scope.launch {
try {
withContext(Dispatchers.IO) {
val productsType= mobileApi.apiMobileProductTypeGetAllPost(params, 0, 50, "", "")
viewProductType.loadAllTypeProduct(productsType)
}
basicViewInterface.hideProgressBar()
} catch (e: Throwable) {
e.printStackTrace()
}
}
if (task.isCancelled){
basicViewInterface.displayError("error")
}
我想调用我的 WS 并使用 try/catch 处理异常并在 Toast 中显示错误,我该怎么做。
【问题讨论】:
标签: android kotlin kotlin-coroutines