当前位置: 首页 > news >正文

6.kotlin安卓实践课程-用kotlin写第一个activity对应P层


简介

主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。

针对人群:Android中级以上,kotlin入门


上一篇文章讲了MainActivity的代码构成

MainActivity当中有一段代码

 floatingButton.setOnClickListener {
      mPresenter.getRandom("Android")
    }

它就是通过P层去请求网络,具体的定义我们先看看RandomPresenter的构成

 /**
 * Created by bigman on 18-05-18.
 */
class RandomPresenter
@Inject constructor(private val mModel: RandomModel,
                    private val mView: RandomContract.View) : RandomContract.Presenter, BasePresenter() {
    override fun getRandom(type: String) {
        addSubscription(
                 mModel.getRandom(type)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ res ->
                    if (!res.error) {
                        mView.onRandom(res.results[0])
                    }
                }, {}))
    }
}
  1. 首先看看这个addSubscription是个什么方法
/**
 * Created by bigman on 18-05-18.
 */
open class BasePresenter {
    var compositeSubscription = CompositeSubscription()

    protected fun addSubscription(subscription: Subscription) {
        compositeSubscription.add(subscription)
    }

     fun unSubscribe() {
        if(compositeSubscription.hasSubscriptions()){
            compositeSubscription.unsubscribe()
        }
    }
}

每个Presenter都要继承于BasePresenter,然后由BasePresenter里面的CompositeSubscription对象统一管理订阅者的订阅和解绑(rxjava2实现就是观察者模式,不了解rxjava2的可以去学习一下rxjava2)

语法点:继承
open class BasePresenter 

由于kotlin中所有类和方法默认都是final的,不能直接继承或重写,需要继承的类或类中要重写的方法都应当在定义时添加open关键字

  1. 然后又回到RandomPresenter
 mModel.getRandom(type)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe({ res ->
                    if (!res.error) {
                        mView.onRandom(res.results[0])
                    }
                }, {})

mModel接下来几节会说到,我们主要看看这个链式调用,这是一个基本的rx异步操作,通过mModel做网络请求,然后在安卓主线程观察一旦有结果返回就通过subscribe订阅结果处理数据,并且通过mView这个引用对象去回调通知界面做显示等UI操作


欢迎一起交流,有问题加群交流

kotlin实战交流群群二维码.png

相关文章:

  • MHA源码分析——环境部署
  • 你需要了解的23种JavaScript设计模式
  • 2018-06-01Linux学习
  • 调查:市面上你知道有哪几款APP支持这个功能?
  • Python将SQL server 数据库导入到mongoDB数据库中
  • 多线程 - wait、notify
  • STP的算法与PVST+实现负载均衡
  • linux用户和权限详解
  • python---list列表、元组
  • 回归初始互联网手机核心档位初心 荣耀Play性能真旗舰再出发
  • 高性能服务器开发基础系列 (七)——开源一款即时通讯软件的源码
  • Docker命令备忘录
  • html+css+js 快速打造进度条
  • SQL 左连、右连、内连、外连
  • LMDB概述
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • interface和setter,getter
  • JAVA SE 6 GC调优笔记
  • jQuery(一)
  • JWT究竟是什么呢?
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • October CMS - 快速入门 9 Images And Galleries
  • Python实现BT种子转化为磁力链接【实战】
  • Swift 中的尾递归和蹦床
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里云购买磁盘后挂载
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 老板让我十分钟上手nx-admin
  • 如何实现 font-size 的响应式
  • 首页查询功能的一次实现过程
  • 网络应用优化——时延与带宽
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • #HarmonyOS:基础语法
  • (1)(1.11) SiK Radio v2(一)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (ZT)薛涌:谈贫说富
  • (规划)24届春招和25届暑假实习路线准备规划
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (排序详解之 堆排序)
  • (一)Neo4j下载安装以及初次使用
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net Application的目录
  • .Net core 6.0 升8.0
  • .net core 依赖注入的基本用发
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .stream().map与.stream().flatMap的使用
  • @RequestMapping 的作用是什么?
  • @拔赤:Web前端开发十日谈
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [Assignment] C++1