• 瑞金千人雨伞拼图创世界吉尼斯纪录 2019-07-02
  • “熊孩子”与幼儿教育 2019-06-15
  • 港媒称中国手游在韩国吸金美日手游遭韩玩家冷落 2019-06-15
  • 酒与植物 轻酌一樽是花香 2019-05-13
  • 台军为帮农民每餐吃香蕉 台媒改善两岸关系是根本 2019-05-12
  • 原脉——大地肌体上的血脉文章中国国家地理网 2019-05-11
  • 用更加过硬的作风追求改革新突破 2019-05-11
  • 欧版T90暴露法德坦克硬伤 VT4我离最强只差两步 2019-05-10
  • 【专题】河北省无偿献血领导小组会议报道 2019-05-10
  • 科幻推理剧《端脑》北京首映 搜狐匠心“烧脑”之作获赞 2019-05-09
  • 【大家谈】激励实干担当,谱写奋斗“进行曲” 2019-05-08
  • 回复@老老保老张工:连马克思都要重构个人所有制也!你不会自以为比马克思还高明吧? 2019-05-08
  • 学习宣传贯彻习近平新时代中国特色社会主义思想系列研讨会br第三场研讨会发言摘编 2019-05-07
  • 2000年出生的孩子属龙,要风得风,要雨得雨 2019-05-07
  • 美国防部宣布暂停8月美韩联合军演 2019-05-06
  • 生肖时时彩的模拟:Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要 [复制链接]

    2019-11-8 10:47
    rongchuang 阅读:342 评论:0 赞:0

    一、前言

    • 本文不讨论协程、Retrofit、MVVM的原理以及基本使用,需要的可以在其他博主那儿找到很好的文章。
    • 本文没有选择DataBinding的双向绑定方式,因为个人觉得DataBinding污染了xml,并且在定位错误问题上比较麻烦。
    • 也没有采用Flux、Redux、ReKotlin这样的框架,因为目前还不太熟。
    • 可以把本文看作是一篇实现过程纪要,欢迎交流分享,提出建议。

    二、过程与思考

    香港生肖时时彩 www.eptu.com.cn 基本依赖

    • 生命周期组件相关
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0-beta01'
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-beta01"
    • 协程
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0"
    • 网络
    implementation 'com.squareup.retrofit2:retrofit:2.6.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'

    备注:Retrofit 在2.6以后对协程有了更友好的实现方式,所以在版本选择上是有要求的。

    动手之前

    因为接入协程的缘故,像以前以回调onResponse,onFailure的回调方式是不太符合协程设计的。Kotlin协程对于Retrofit的onFailure处理是直接以Trowable进行抛出的,所以在一开始就要构建好对执行Retrofit的挂机代码块的try..catch设计。

    基本的网络访问封装

    基本操作还是要有的

    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    定义基本的Api返回类

    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    定义一个Api以便于测试

    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    封装BaseViewModel

    网络请求必须在子线程中进行,这是Android开发常理,使用协程进行网络请求在代码上可以让异步代码看起来是同步执行,这很大得提高了代码得可读性,不过理解挂起的确需要时间。BaseViewModel中最终得事情就是要搭建关于协程对于Retrofit网络请求代码块得try..catch。

    • 重要得try..catch
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    将捕获到得异常进行下放保证执行过程中得情况都是可控得。

    • main线程
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • IO线程
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • 不要忘记onCleared
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    错误处理

    错误处理分为1.请求异常(及trycatch中的异常),2.服务器返回的响应体中定义的异常,这些异常只要是带有网络访问性质的APP上都是常见的,所以对NetWork的异常处理我定义了一个NetWorkError.kt文件,里面的函数为顶级函数,这样方便在项目的其他位置直接访问而不需要通过类名或者实例化操作就可以访问。

    try catch异常处理

    像一般触发的链接超时、解析异常都可以做出处理,如果不try catch,那么APP有可能会崩溃,或者长时间没有任何回执,体验很差。

    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要


    服务器定义的响应异常

    一般服务器对于请求都存在响应码,客户端根据响应码去做响应的处理,不同的错误码会有不同的日志回馈或者提示,但这都是建立在请求成功上的。这里一般无非为成功和失败。

    • Http请求响应封装
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • 错误枚举
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • 错误处理

    • 对HttpResponse进行处理
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    这里是直接对HttpRespoonse进行处理,还需要对当前的响应内容有一个转换

    • 转换服务器响应
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    暂时定义为一个扩展函数,方便结合this使用?;痉庾巴瓿梢院?,开始搞一个测试类来进行测试。


    测试

    • client
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • model
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • viewModel
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    • 最后在LoginAct对loginState实现监听
    Kotlin 协程+Retrofit+MVVM 搭建网络请求实现纪要

    三、总结

    这是目前自己能够想到的一些方式,个人觉得Kotlin的确带来很大的改观,特别是在可读性和维护性上。虽然在架构和整体设计这件事情上,本来就没有标准的方式,这些问题都是相对的。

    对于DataBinding的双向绑定方式期待后期Google能有更好的实现方案,或者也可以考虑单向数据流的实现框架。


    我来说两句
    您需要登录后才可以评论 登录 | 立即注册
    facelist
    所有评论(0)
    领先的中文移动开发者社区
    18620764416
    7*24全天服务
    意见反?。[email protected]

    扫一扫关注我们

    Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 香港生肖时时彩 )

  • 瑞金千人雨伞拼图创世界吉尼斯纪录 2019-07-02
  • “熊孩子”与幼儿教育 2019-06-15
  • 港媒称中国手游在韩国吸金美日手游遭韩玩家冷落 2019-06-15
  • 酒与植物 轻酌一樽是花香 2019-05-13
  • 台军为帮农民每餐吃香蕉 台媒改善两岸关系是根本 2019-05-12
  • 原脉——大地肌体上的血脉文章中国国家地理网 2019-05-11
  • 用更加过硬的作风追求改革新突破 2019-05-11
  • 欧版T90暴露法德坦克硬伤 VT4我离最强只差两步 2019-05-10
  • 【专题】河北省无偿献血领导小组会议报道 2019-05-10
  • 科幻推理剧《端脑》北京首映 搜狐匠心“烧脑”之作获赞 2019-05-09
  • 【大家谈】激励实干担当,谱写奋斗“进行曲” 2019-05-08
  • 回复@老老保老张工:连马克思都要重构个人所有制也!你不会自以为比马克思还高明吧? 2019-05-08
  • 学习宣传贯彻习近平新时代中国特色社会主义思想系列研讨会br第三场研讨会发言摘编 2019-05-07
  • 2000年出生的孩子属龙,要风得风,要雨得雨 2019-05-07
  • 美国防部宣布暂停8月美韩联合军演 2019-05-06
  • 香港100%、最准的一肖中特 吉林快3专家预测豹子 18020足彩半全场开奖 脉动棋牌官网 邀请好友能赚钱的微信小程序 甘肃十一选五开将结果 广西快3开奖结果遗漏 80彩票游戏 百赢棋牌官方下载苹果 魔兽世界角色查询 七星彩和值走势图 赚钱的时代变化 吉林十一选五开奖结果走势图 河南快赢481往期走势图 体彩p3图谜总汇 极速时时彩是官方彩吗