Android 之Kotlin使用Retrofit和RxJava实现网络请求

一、实现原理

    使用Retrofit实现网络请求,在通过Rxjava2实现线程调度,通过Gson得到当前的需要的模型类

二、实现过程

1、添加依赖

    implementation 'com.squareup.okhttp3:okhttp:3.12.3' // OkHttp3
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' // 日志
    implementation 'com.squareup.retrofit2:retrofit:2.6.0' // Retrofit2
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.6.0' //  Retrofit2 -> RxJava 的适配
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0' // Gson转换器
    implementation 'com.squareup.retrofit2:converter-scalars:2.4.0' // 响应转为基本类型所需依赖
// LeakCanary 内存泄漏检测工具
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.3'
    debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.3'
    // RxJava
    implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

    // 处理网络请求可能导致的内存泄漏
    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0'

 2、添加对应的权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3、创建对应的基础类目录

三、实现

1、因为使用了RxJava2所以需要使用Rxlifecycle防止内存泄露

2、实现Activity和Fragment的基类,并根据自己的需要做简单的封装

abstract class BasicActivity : RxFragmentActivity() {
    protected abstract val mLayoutResId: Int

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (this.mLayoutResId > 0) {
            setContentView(mLayoutResId)
        } else {
            throw RuntimeException("this activity is miss cotentview")
        }
        onContentViewReady(savedInstanceState)

    }

    abstract fun onContentViewReady(savedInstanceState: Bundle?)

    fun <A> startActivity(clazz: Class<A>, data: Bundle?) {
        var intent = Intent(this, clazz)
        data?.let { intent.putExtras(data) }
        this.startActivity(intent)
    }

    fun <A> startActivity(clazz: Class<A>) {
        var intent = Intent(this, clazz)
        this.startActivity(intent)
    }
}
 
abstract class BasicFragment : Fragment(), LifecycleProvider<FragmentEvent> {
    private val lifecycleSubject = BehaviorSubject.create<FragmentEvent>()
    protected abstract val mLayoutResId: Int
    protected var mRootView: View? = null

    override fun lifecycle(): Observable<FragmentEvent> {
        return this.lifecycleSubject.hide()
    }

    /**
     * 指定生命周期断开
     */
    override fun <T : Any?> bindUntilEvent(event: FragmentEvent): Lifecycl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值