今天要说的干货是:以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)网络请求的两种实现方式的更多相关文章

  1. android 定时请求(两种实现方式)

    方式一: Handler + Runnable (借鉴网址:http://stackoverflow.com/questions/6207362/how-to-run-an-async-task-fo ...

  2. Android(java)学习笔记147:textView 添加超链接(两种实现方式,,区别于WebView)

    1.方式1: LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams params = new LinearLa ...

  3. Android(java)学习笔记90:TextView 添加超链接(两种实现方式)

    1. TextView添加超链接: TextView添加超链接有两种方式,它们有区别于WebView: (1)方式1: LinearLayout layout = new LinearLayout(t ...

  4. Android MVP模式

    转自http://segmentfault.com/blogs,转载请注明出处Android MVP Pattern Android MVP模式\[1\]也不是什么新鲜的东西了,我在自己的项目里也普遍 ...

  5. Android MVP模式简单易懂的介绍方式 (二)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 上一篇文章我们介绍完了Model的创建 ...

  6. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  7. [Android] Android MVP 架构下 最简单的 代码实现

    Android  MVP 架构下  最简单的 代码实现 首先看图: 上图是MVP,下图是MVC MVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互.而 ...

  8. android MVP模式介绍与实战

    android MVP模式介绍与实战 描述 MVP模式是什么?MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数 ...

  9. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200

随机推荐

  1. 通过进程名称删除进程 ps -ef

    删除进程名为udpserver的进程. kill -9 $(ps -ef|grep udpserver | grep java|awk '{print $2}' ). 1.通过进程名取得进程号: ps ...

  2. js如何打印对象

    js调试中经常会碰到输出的内容是对象而无法打印的时候,光靠alert只能打印出object标示,却不能打印出来里面的内容,甚是不方便,于是各方面整理总结了如下一个函数,能够将数组或者对象这类的结果一一 ...

  3. visual studio NuGet

    http://www.cnblogs.com/dudu/archive/2011/07/15/nuget.html 首先打开程序包管理器控制台:工具→Nuget程序包管理器→程序包管理器控制台 Ins ...

  4. Linux命令 lsof使用

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件. lsof +d ...

  5. Delphi APP 開發入門(十)REST Client 開發

    Delphi APP 開發入門(十)REST Client 開發 分享: Share on facebookShare on twitterShare on google_plusone_share ...

  6. javascript 闭包 内存

  7. 《mysql必知必会》读书笔记--游标的使用

    游标的使用 MySQL中游标只能用于存储过程 创建游标 CREATE PROCEDURE processorders() BEGIN DECLARE ordernumbers CURSOR FOR S ...

  8. Maven打包部署

    Maven打Jar包 问题一 Eclipse突然SB告诉我类不存在还让我导包进来O__O "…,但是我明明有这个类.这是不要慌,通过在网上搜索得知:由于eclipse的编译是基于时间戳的判断 ...

  9. Oracle DDL+DML+DCL实例

    SQL语言共分为四大类: 数据查询语言DQL: 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块. 数据操纵语言DML: DML是“数据操纵语言”( Data ...

  10. hdu6194 string string string

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6194 题目: string string string Time Limit: 2000/10 ...