我有这个代码:
coroutineScope.launch(Dispatchers.IO) {
if (openGraphParser != null && isActive) {
Logger.info("Loading OpenGraph data for $link")
val content = openGraphParser.getContents(link, messageText)
Logger.info("OpenGraph data for $link received")
withContext(Dispatchers.Main) {
Logger.info("Showing OpenGraph data for $link")
onOgDataReceived(content)
}
}
我没有看到日志:“显示 $link 的 OpenGraph 数据”。 “withContext(...)”内部的代码根本没有被调用。为什么?有人可以向我解释一下吗?最后一条日志是“收到 $link 的 OpenGraph 数据”。如果我把它改成
coroutineScope.launch(Dispatchers.IO) {
if (openGraphParser != null && isActive) {
Logger.info("Loading OpenGraph data for $link")
val content = openGraphParser.getContents(link, messageText)
Logger.info("OpenGraph data for $link received")
ogDataContent?.ogDataLayout?.get()?.post {
Logger.info("Showing OpenGraph data for $link")
onOgDataReceived(content)
}
}
}
比视图中的帖子一切正常。
你的
coroutine scope
好像发生了异常。你看不到它,因为你没有使用 CoroutineExceptionHandler
,并且作用域吞噬了异常。解决方案是向您的范围提供 CoroutineExceptionHandler
,如下所示:
val exceptionHandler = CoroutineExceptionHandler { _: CoroutineContext, throwable: Throwable ->
throwable.printStackTrace()
}
coroutineScope.launch(Dispatchers.IO + exceptionHandler) {
if (openGraphParser != null && isActive) {
Logger.info("Loading OpenGraph data for $link")
val content = openGraphParser.getContents(link, messageText)
Logger.info("OpenGraph data for $link received")
withContext(Dispatchers.Main) {
Logger.info("Showing OpenGraph data for $link")
onOgDataReceived(content)
}
}
}
然后检查您的
logcat
以查看异常日志。