使用LiveData+Retrofit,实现具有生命周期的网络请求

(本文代码示例采用Kotlin编写)

1. 前言

此前我们一直是使用RxJava+Retrofit实现网络请求,直接使用这种请求方式是没有和Activity或Fragment的生命周期绑定的,就容易出现内存泄漏或者程序崩溃的情况。因此通常还会加上一个RxlifeCycle来保证和我们的生命周期绑定就变成了RxJava+Retrofit+RxLifeCycle这种结构了,但是自从Android官方推出了LiveData组件,因为LiveData是带有生命周期属性的,我们就可以抛弃原来的写法,来创造属于自己的一套网络请求框架,即下面要讲的LiveData+Retrofit这种模式。

2. RxJava+Retrofit的使用

我们先看下使用RxJava+Retrofit的请求方式是怎么样,

(这里以Github的接口为例)

2.1 准备工作

首先我们会创建一个接口

例如:

interface Api {
	//获取账户信息
    @GET("users/{account}")
    fun getUserDetail(@Path("account") acccount: String?): Observable<GitHubUserBean>

}

这里我们想要的返回结果是这样的 Observable 里面包含了我们想要的返回对象GitHubUserBea

然后我们通过Retrofit来得到这个Api的实例

private val api: Api by lazy {
        okHttpClient.addInterceptor(HttpLoggingInterceptor().apply {
            setLevel(HttpLoggingInterceptor.Level.BODY)
        })
        val retrofit = Retrofit.Builder().baseUrl("https://api.github.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(OkHttpClient())
            .build()
        retrofit.create(Api::class.java)
    }

这里baseUrl= https://api.github.com/ ,可以从上面看到最后我们调用的接口地址应该是这样的 https://api.github.com/users/{account},其中account就是我们需要传入的Github账号。 这里我们随便找一个账号吧(JakeWharton)

然后准备工作我们就做好了,现在我们呢就可以请求接口了。 我们一般做法是这样

	api.getUserDetail(account).subscribeOn(Schedulers.i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值