安卓笔记-ViewModel封装

使用了rxjava以及retrofit,如果以我的封装为参考的话请再看一下我之前发的对网络框架的封装,此文仅用于本人记录开发经验所用。
代码如下

/**
 *@author Chord.p
 *@time 2020-01-02 10:29
 *speak softly love
 */
open class BaseViewModel : ViewModel() {
    var disposables = CompositeDisposable()
    /**
     * 用来实现网络请求时展示等待dialog
     */
    var isRequest = MutableLiveData<Boolean>()
    /**
     * 用来处理网络请求失败的情况
     */
    var msg = MutableLiveData<BaseData<Any>>()

    /**
     * 仅针对与单次网络请求的封装,若在链式多次请求场景下,则还需要自行拼接链式请求
     */
    inline fun <T> request(observable : Observable<T> , crossinline callBack : (T) -> Unit) {
        observable.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(object : Observer<T> {
                override fun onComplete() {
                    isRequest.value = false
                }

                override fun onSubscribe(d: Disposable) {
                    disposables.add(d)
                    isRequest.value = true
                }

                override fun onNext(t: T) {
                    callBack.invoke(t)
                }

                override fun onError(e: Throwable) {
                    Log.e("netError",e.message)
                    isRequest.value = false
                    msg.value = BaseData(500, "网络请求错误,请重试")
                }

            })
    }

    fun errorData(e : Throwable) : BaseData<Any> {
        Log.e("netError",e.message)
        isRequest.value = false
        return BaseData(500, "网络请求错误,请重试")
    }

    fun startRequest(d : Disposable) {
        disposables.add(d)
        isRequest.value = true
    }

    fun endRequest() {
        isRequest.value = false
    }
}
发布了6 篇原创文章 · 获赞 0 · 访问量 81

猜你喜欢

转载自blog.csdn.net/u011997929/article/details/105117091