1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...

kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...

时间:2019-08-01 18:24:47

相关推荐

kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式...

独角兽企业重金招聘Python工程师标准>>>

今天要说的干货是:以Kotlin,在MVP模式下(OKHttp和 Retrofit+RxJava)网络请求两种实现方式的一个小案例,希望对大家有所帮助,效果图:

Retrofit是Square公司开发的一款针对Android网络请求的一个当前很流行的网络请求库。可参考博客看详细介绍:Android开发之Retrofit+RxJava的使用

完成以上功能需引入:

compile "com.android.support:appcompat-v7:$support_version"compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"compile "org.jetbrains.anko:anko-common:$anko_version"compile 'com.zhy:okhttputils:2.6.2'compile 'com.alibaba:fastjson:1.1.54.android'compile 'com.squareup.retrofit2:retrofit:2.1.0'compile 'com.squareup.retrofit2:converter-gson:2.1.0'compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'compile 'io.reactivex:rxandroid:1.2.1'compile 'io.reactivex:rxjava:1.1.6'

class MvpOkHttpActivity : BaseActivity<IView,PresenterEmlpe>(),IView {override fun setMainLayout(): Int {return R.layout.activity_mvp_ok_http}override fun createPresenter(): PresenterEmlpe {return PresenterEmlpe()}override fun initView() {text.text="加载中......"}override fun initBeforeData() {btn.setOnClickListener {p!!.onRequest(Api.showRequestData("15","5"))}}override fun onLoadContributorStart() {toast("加载中......")}override fun onLoadContributorComplete(data: String) {Log.i("data",data)toast(data)//解析数据val entityTitle = JSON.parseObject(data, EntityTitle::class.java)if (entityTitle.data != null){text.text=entityTitle!!.data!!.get(0).title}}override fun onNetWrok() {toast("网络未连接")}override fun onError(error: String) {toast(error)}}

可见代码是相当比较少的,以MVP模式来完成的,主要有Model,Presenter,View

Model:

class ModelEmlpe : IMode{override fun onRequest(url: String, map: Map<String, String>,callBackListenter: IMode.CallBackListenter) {OkHttpUtils.post().url(url).params(map).build().execute(object : StringCallback() {override fun onError(call: okhttp3.Call, e: Exception, id: Int) {callBackListenter.onError("加载数据失败")}override fun onResponse(response: String, id: Int) {callBackListenter.onDataCallBackListenter(response)}})}}

Presenter

class PresenterEmlpe : BasePresenter<IView>(){var model: IMode? = nullinit {model = ModelEmlpe()}fun onRequest(map: Map<String,String>){var iView = getView()if (model != null && iView != null) {//验证网络 无网络不加载if (false){iView.onNetWrok()return}iView.onLoadContributorStart()//初始化model!!.onRequest(Api.url, map, object : IMode.CallBackListenter {override fun onDataCallBackListenter(data: String) {iView.onLoadContributorComplete(data)}override fun onError(error: String) {iView.onError(error)}})}}override fun detachView() {super.detachView()if (model != null){model = null}}}

当然解析数据也可以不用在Activity中完成,可以在我们的Presenter或Model中完成也是可以的,

我们的RxJava+Retrofit 提供了请求时就直接解析的功能,这点也可以好好运用。

两种请求方式的Activity,Presenter和View 其实是差不多的,就是Model层 实现的方式不一样而已。

由于代码太多,就不一一贴出来了,源码直接下载即可

源码点击下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。