kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
今天要说的干货是:以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'
先来看看 Activity
MvpOkHttpActivity.Java
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? = null
init {
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层 实现的方式不一样而已。
由于代码太多,就不一一贴出来了,源码直接下载即可
kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式的更多相关文章
- android 定时请求(两种实现方式)
方式一: Handler + Runnable (借鉴网址:http://stackoverflow.com/questions/6207362/how-to-run-an-async-task-fo ...
- Android(java)学习笔记147:textView 添加超链接(两种实现方式,,区别于WebView)
1.方式1: LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLa ...
- Android(java)学习笔记90:TextView 添加超链接(两种实现方式)
1. TextView添加超链接: TextView添加超链接有两种方式,它们有区别于WebView: (1)方式1: LinearLayout layout = new LinearLayout(t ...
- Android MVP模式
转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...
- Android MVP模式简单易懂的介绍方式 (二)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 上一篇文章我们介绍完了Model的创建 ...
- Android MVP模式简单易懂的介绍方式 (一)
Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...
- [Android] Android MVP 架构下 最简单的 代码实现
Android MVP 架构下 最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...
- android MVP模式介绍与实战
android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...
- Android MVP模式 简单易懂的介绍方式
主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200
随机推荐
- 别真以为JavaScript中func.call/apply/bind是万能的!
自从学会call/apply/bind这三个方法后我就各种场合各种使用各种得心应手至今还没踩过什么坑,怎么用?说直白点就是我自己的对象没有某个方法但别人有,我就可以通过call/apply/bind去 ...
- 随机深林和GBDT
随机森林(Random Forest): 随机森林是一个最近比较火的算法,它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多 ...
- DOS命令安装配置Apache + MySQL + PHP 开发环境 (VC11)
一.下载 1.下载Apache 下载地址:https://www.apachelounge.com/download/VC11/ 2.下载MySQL 下载地址:http://dev.mysql.com ...
- javascript 对象 原型 prototype
- Springboot 日志管理配置logback-spring.xml
几种常见的日志 Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用: Log4j2:apach旗下的关于log4j的升级版: Logback:是基于slf4j接 ...
- vue-cli中的.babelrc文件介绍
转载自:http://www.cnblogs.com/ye-hcj/p/7071850.html { // 此项指明,转码的规则 "presets": [ //个人认为多此一举 [ ...
- Linux-chmod_命令的详细用法讲解
Linux chmod 命令 chmod用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一种是包含 字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. 1 ...
- List泛型集合转DataTable
自存,此方法可以防止出现DataSet不支持System.Nullable的错误 public static DataTable ToDataTable<T>(IEnumerable< ...
- Linux数据备份与恢复 dump、restore、dd命令
dump命令:备份分区.文件或目录 在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下: [root@localhost -]# yum -y install ...
- HCNP学习笔记之PXE原理详解及实践
一.PXE简介 PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...