Android开发之MVVM模式实践(六):协程与网络请求的结合

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
摘要由CSDN通过智能技术生成

二、与Retrofit的结合

目前在Android开发中,最主流的网络请求框架应该就是Retrofit+OkHttp+RxJava这一套了。那么下面我们就使用Retrofit来结合协程进行封装。在网络请求中,协程起的作用其实与RxJava是一致的,所以如果在别处没有使用RxJava的需求,此处可以不引入RxJava,只需引入Retrofit+OkHttp

Interface

interface FlyInterface {
/**

  • 获取文章列表
    */
    @GET(“article/”)
    suspend fun get_article_list(@Query(“page_size”) size: Int): ApiResponse<CommonListDto
    >
    }

interface的改造非常简单,仅仅是在函数前加上suspend修饰。

ApiResponse

abstract class HttpResponse(val code: Int, val msg: String, val data: T?) {
abstract fun isSuccess(): Boolean
}

class ApiResponse(code: Int, msg: String, data: T?) : HttpResponse(code, msg, data) {

override fun isSuccess(): Boolean {
return code == 0
}
}

ApiResponse是上述interface中函数的返回值,实现也非常简单。因为接口返回的数据格式一般都是统一的,例如:

{
“code”: 0;
“message”: “Success”;
“data”: {

}
}

所以,我们也需要将返回的数据格式用一个统一的数据模型来处理。

HttpError

我们可以事先定义一些事先常见的网络错误,方便后续使用。

enum class HttpError(val code: Int, @StringRes val message: Int) {
// 未知错误
UNKNOWN(-1, R.string.fly_http_error_unknow),

// 网络连接错误
CONNECT_ERROR(-2, R.string.fly_http_error_connect),

// 连接超时
CONNECT_TIMEOUT(-3, R.string.fly_http_error_connect_timeout),

// 错误的请求
BAD_NETWORK(-4, R.string.fly_http_error_bad_network),

// 数据解析错误
PARSE_ERROR(-5, R.string.fly_http_error_parse),

// 取消请求
CANCEL_REQUEST(-6, R.string.fly_http_cancel_request),
}

Retrofit

相信大部分同学在使用Retrofit时都会自己做二次封装的,此处就不附上详细的代码了,主要看关键代码,需要完整代码的可以去小益的Github上自行查看。

class BaseHttpClient {

/**

  • 获取service对象
  • @param service api所在的interface
    */
    fun getService(service: Class): T {
    var retrofitService: T? 
  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值