今天要说的干货是:以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. 编辑器——sublime

    在这里只介绍自己经常使用的编辑器sublime 第一:安装node插件[出处:http://www.bubuko.com/infodetail-798008.html] 1.下载Nodejs插件,下载 ...

  2. 设备驱动与控制器 I/O

    控制器是对硬件发起控制命令,负责给系统提供接口,想要正常使用该硬件功能系统中必须安装相应驱动 I/O设备 cpu和存储器并不是操作系统唯一需要管理的资源,I/O设备也是非常重要的一环. I/O设备一般 ...

  3. 264. Ugly Number II(丑数 剑指offer 34)

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  4. IDEA创建Spring Boot的项目

    IDEA创建SpringBoot的项目非常的方便智能,可以实现零配置,只需要在创建的时候勾选你需要的功能,比如mybatis,mysql等等,它会帮你自动下载导入响应的jar,不用自己再去手动填写. ...

  5. Winter-2-STL-B Brackets 解题报告及测试数据

    Time Limit:2000MS     Memory Limit:65536KB Description Given a string consisting of brackets of two ...

  6. 解决日志unicode编码问题

    Xcode打印日志里如果有汉字,有时会以Unicode编码形式展示,另需工具转码,降低了开发的效率,未解决这一问题,简便的解决方法是 pod 'HYBUnicodeReadable' 这个第三方库很好 ...

  7. redis数据持久化内存不足

    原因:写数据到redis里面写不进去,查看redis日志显示: Can't save in background: fork: Cannot allocate memory 在小内存的进程上做一个fo ...

  8. 【Linux学习】1.Linux基础知识

    记录学习Linux 系统的相关知识点,欢迎大家拍砖交流,一起成长:QQ:2712192471 作者背景:前端开发工程师 | Python | web安全爱好者 一,Windows系统下 Linux 的 ...

  9. iOS知识点整理

    1.宏定义 #define  #   ## a. 后面一个#是转成字符串 b. 后面## 是连接的作用 2. __attribute__ 常用的 __attribute__(( constructor ...

  10. springbcloud5----高可用

    package com.itmuch.cloud; import org.springframework.boot.SpringApplication; import org.springframew ...