简介
主要会通过安卓实战来讲解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])
}
}, {}))
}
}
- 首先看看这个
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关键字
- 然后又回到
RandomPresenter
mModel.getRandom(type)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ res ->
if (!res.error) {
mView.onRandom(res.results[0])
}
}, {})
mModel接下来几节会说到,我们主要看看这个链式调用,这是一个基本的rx异步操作,通过mModel做网络请求,然后在安卓主线程观察一旦有结果返回就通过subscribe订阅结果处理数据,并且通过mView这个引用对象去回调通知界面做显示等UI操作