首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用kotlin协程处理2.6中的无互联网连接错误

使用kotlin协程处理2.6中的无互联网连接错误
EN

Stack Overflow用户
提问于 2019-06-22 15:24:17
回答 3查看 10.2K关注 0票数 4

我正在使用升级2.6和kotlin协程来进行API调用而不阻塞UI线程,我让它工作了,但当我关闭互联网连接时,应用程序崩溃了。logcat错误为: E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-1

下面是我的代码:

代码语言:javascript
复制
private fun handleIntent(slug: String) {
    val service = UtilityMethods.migrationTimeService()

    UtilityMethods.showView(loading_view)
    UtilityMethods.hideView(network_error_msg)

    CoroutineScope(Dispatchers.IO).launch {
        val res = service.getPostBySlug(slug)

            try {
                withContext(Dispatchers.Main) {

                    //Do something with response e.g show to the UI.
                    val post = res.body()!!.first()

                    UtilityMethods.hideView(loading_view)

                    val title = post.title?.rendered
                    val content = post.content?.rendered
                    val imageUrl = post.jetPackFeaturedMediaUrl

                    title_txtView.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
                        Html.fromHtml(title, Html.FROM_HTML_MODE_COMPACT).toString()
                    else
                        Html.fromHtml(title).toString()

                    content_txtView.loadData(content.toString(), "text/html", "UTF-8")

                    Picasso.get().load(imageUrl).fit().centerCrop().into(thumbnail_imgview)
                }

            } catch (e: HttpException) {
                UtilityMethods.showView(network_error_msg)
            } catch (e: Throwable) {
                Toast.makeText(this@PostContentActivity, "Ooops: Something else went wrong", Toast.LENGTH_LONG)
            }
    }
}
EN

Stack Overflow用户

发布于 2019-06-22 16:58:59

而不是这样:

代码语言:javascript
复制
    CoroutineScope(Dispatchers.IO).launch {
    val res = service.getPostBySlug(slug)

        try {
            withContext(Dispatchers.Main) {

试试这个:

代码语言:javascript
复制
    CoroutineScope(Dispatchers.Main).launch {
    val res = service.getPostBySlug(slug)

        withContext(Dispatchers.IO) {
            try {

将“try and catch”块代码包装在Dispatchers.IO中,而不是将Dispatchers.IO包装在try块中

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56713483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档