博客
关于我
【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/

你可能感兴趣的文章
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>