博客
关于我
【39】kotlin 协程 异步下载图片2
阅读量:364 次
发布时间:2019-03-04

本文共 3091 字,大约阅读时间需要 10 分钟。

新建package  basic

新建BaseCoroutines.kt

package com.yzdzy.kotlin.chapter7.basicimport cn.kotliner.coroutine.common.HttpErrorimport cn.kotliner.coroutine.common.HttpExceptionimport cn.kotliner.coroutine.common.HttpServiceimport cn.kotliner.coroutine.common.logimport cn.kotliner.coroutine.ui.LOGO_URLimport java.lang.Exceptionimport javax.xml.ws.http.HTTPExceptionimport kotlin.coroutines.resumeimport kotlin.coroutines.resumeWithExceptionimport kotlin.coroutines.startCoroutineimport kotlin.coroutines.suspendCoroutinefun 我要开始协程了(block: suspend () -> Unit) {    block.startCoroutine(BaseCoroutines())}suspend fun 我要开始加载图片了(url: String) = suspendCoroutine
{ continuation -> log("耗时下载图片") try { val reponseBody = HttpService.service.getLogo(LOGO_URL).execute() if (reponseBody.isSuccessful) { reponseBody.body()?.byteStream()?.readBytes()?.let(continuation::resume) }else{ continuation.resumeWithException(HttpException(reponseBody.code())) } }catch (e:Exception){ continuation.resumeWithException(e) }}

新建 Corutines.kt

package com.yzdzy.kotlin.chapter7.basicimport kotlin.coroutines.Continuationimport kotlin.coroutines.CoroutineContextimport kotlin.coroutines.EmptyCoroutineContextclass BaseCoroutines: Continuation
{ override val context: CoroutineContext get() = EmptyCoroutineContext override fun resumeWith(result: Result
) { }}

在刚才的common包中新建

Log.kt

package cn.kotliner.coroutine.commonimport java.text.SimpleDateFormatimport java.util.*/** * Created by benny on 5/20/17. */val dateFormat = SimpleDateFormat("HH:mm:ss:SSS")val now = {    dateFormat.format(Date(System.currentTimeMillis()))}fun log(msg: String) = println("${now()} [${Thread.currentThread().name}] $msg")

新建 Https.kt  为了抛异常使用

package cn.kotliner.coroutine.common/** * Created by benny on 5/20/17. */object HttpError{    const val HTTP_ERROR_NO_DATA = 999    const val HTTP_ERROR_UNKNOWN = 998}data class HttpException(val code: Int): Exception()

修改MainKt.kt

package cn.kotliner.coroutine.uiimport cn.kotliner.coroutine.common.HttpErrorimport cn.kotliner.coroutine.common.HttpServiceimport cn.kotliner.coroutine.common.logimport com.yzdzy.kotlin.chapter7.basic.我要开始加载图片了import com.yzdzy.kotlin.chapter7.basic.我要开始协程了import okhttp3.ResponseBodyimport retrofit2.Callimport retrofit2.Callbackimport retrofit2.HttpExceptionimport retrofit2.Responseimport javax.swing.JFrame.EXIT_ON_CLOSEimport javax.swing.SwingUtilities/** * Created by benny on 5/20/17. */const val LOGO_URL = "http://www.imooc.com/static/img/index/logo.png?t=1.1"fun main(args: Array
) { val frame = MainWindow() frame.title = "Coroutine@Bennyhuo" frame.setSize(200, 150) frame.isResizable = true frame.defaultCloseOperation = EXIT_ON_CLOSE frame.init() frame.isVisible = true frame.onButtonClick { log("协程之前") 我要开始协程了 { log("协程开始") val imageDate = 我要开始加载图片了(LOGO_URL) log("拿到图片") frame.setLogo(imageDate) } log("协程之后") }}

查看logo

这说明协程并非异步。下面我们要把他切换到异步

转载地址:http://hosr.baihongyu.com/

你可能感兴趣的文章
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>