7.kotlin安卓实践课程-用kotlin写第一个activity对应M层
简介
主要会通过安卓实战来讲解kotlin语法和实际应用,本教程设及知识点包括框架模式mvp+mvvm, Databinding(数据绑定框架),Dagger2(依赖注入框架),DeepLink(页面路由框架),Rxjava,RxAndroid(异步操作框架),Retrofit,Okhtttp等,不过本教程重点在kotlin所以这些框架需要了解可自行百度。
针对人群:Android中级以上,kotlin入门
上一篇文章讲了RandomPresenter
的代码构成
在上篇RandomPresenter
代码中有这么一段
mModel.getRandom(type) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ res -> if (!res.error) { mView.onRandom(res.results[0]) } }, {}))
mModel.getRandom(type)
这句话就是在mModel里去请求网络,具体实现我们看看
/** * Created by bigman on 18-05-17. */ class RandomModel @Inject constructor(private val service:RandomService) :RandomContract.Model{ override fun getRandom(type:String): Observable<JsonResult<List<FuckGoods>>> { return service.getRandom(type) } }
这个RandomModel
主要是提供了一个注入的构造函数,在这里它的构造函数里面传入了一个RandomService
接口,这个接口的实现如下
/** * Created by liuguirui on 2018/5/17. */ interface RandomService { /** * 手气不错 */ @GET("random/data/{type}/1") fun getRandom(@Path("type") type:String): Observable<JsonResult<List<FuckGoods>>> }
熟悉 Retrofit+Rxjava
的同学应该很清楚这个接口类就是用来声明服务器接口和参数声明的,它和我们正常java写的retrofit接口没太大的区别,这里只有一个getRandom
方法
- 然后让我们再回到
RandomModel
class RandomModel @Inject constructor(private val service:RandomService) :RandomContract.Model
这里的constructor
我们前面我们见过但是我没说,大概英文水平8都是八级以上肯定猜到是构造函数吧。
语法点:构造函数
1.分类
kotlin中构造函数一种主构造函数和次构造函数,而java是没有主次之分但是java也是支持多个构造函数的
2.主构造函数
- 主构造函数是写在类名后面的,比如我们这里的
class RandomModel @Inject constructor(private val service:RandomService)
,这就是主构造函数的一般形式 - 主构造函数只能有一个,次构造函数可有可无
- 主构造函数不能包含任何的代码,但是初始化的代码可以放到
init
函数里面,这个我们前面说过 - 当主构造函数有注解或者可见性修饰符,需加 constructor 关键字,我们这里的代码就包含了注解
3.次构造函数
咱们这里没用到次构造函数没关系,kotlin的次构造函数和java的多个构造函数有点不同,kotlin的次构造函数必须直接或间接的委托给主构造函数
看以下代码
class Coder (name:String){ //直接委托 constructor(name: String,age:Int):this(name) { } //间接委托 constructor(name: String, age: Int,score:Int) : this(name, age) { } }
这里有几个点:
-
class Coder (name:String)
这里其实就是主构造函数 - 次构造函数必须用constructor关键字,而且必须用
:
冒号直接或间接委托给主构造函数 - 直接委托就是this关键字去调用的,比如这里的
constructor(name: String,age:Int):this(name)
就是通过this(name)
直接调用了主构造函数 - 间接委托,比如这里的
constructor(name: String, age: Int,score:Int) : this(name, age)
是先用this(name, age)
调用了第一个次构造函数,然后通过这个次构造函数间接的调用了主构造函数
然后我们回头看看RandomPresenter
的构造函数,其实和这里的 RandomModel
一样的主构造函数,看看它的代码
class RandomPresenter @Inject constructor(private val mModel: RandomModel, private val mView: RandomContract.View) : RandomContract.Presenter, BasePresenter()
其实这种形式在我们这个项目里非常常见大家以后见多了也就习惯了,我们顺便看完这个构造函数里的RandomContract
的代码
/** * Created by bigman on 18-05-18. */ interface RandomContract{ interface View{ fun onRandom(goods:FuckGoods) } interface Model{ fun getRandom(type: String): Observable<JsonResult<List<FuckGoods>>> } interface Presenter{ fun getRandom(type: String) } }
熟悉google官方的mvp框架的同学应该知道这个接口文件的意义,这就是一个简单的协议接口,同时提供了mvp三个核心层次不同的接口定义,其实就是面向接口编程的一种标准形式
欢迎一起交流,有问题加群交流

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python面试问题整理(附答案)
Python的特点如下: Python 是一种解释型,交互式,面向对象的高级编程语言。和别的一些使用标点符号的语言不同,Python使用了大量的英语单词作为关键字,因而具有很好的可读性。而且跟其他编程语言相比,它有更少的语法结构。 Python是可交互的:这意味着你可以使用一个Python终端在写程序时和解释器直接交互。 Python是面向对象的:它支持面向对象风格和将代码封装成类的各种技术。 Python 是一种解释性语言:这意味着你的程序在执行之前不需要编译,而是由解释器在运行时处理。这个特点跟PERL,PHP很像。 Python非常适合编程初级人员:Python非常容易入门而且应用领域也非常广泛,从简单的文字处理到网络浏览和游戏开发。 面试问题整理: 1、什么是Python?使用Python有什么好处? Python是一种编程语言,它有对象,模块,线程,异常处理和自动内存管理。它简洁,简单,方便,容易扩展,有许多自带的数据结构,而且它开源。 2、有哪些工具可以帮助debug或做静态分析? PyChecker 是一个静态分析工具,它报告源代码中的错误并且会报告错误类型和复杂度。Py...
- 下一篇
社招中级前端笔试面试题总结-答案及拓展
最近看到有一篇文章总结了一些前端的面试题,面向的对象应该是社招中初、中级的前端,感觉有一定的参考价值,因此开一个帖子尝试解答这些问题,顺便当做自己的面试题积累。 原文链接戳这里 JavaScript基础 1、声明提前类问题 在网上找到一篇文章,里面有一道面试题,考察了包括变量定义提升、this指针指向、运算符优先级、原型、继承、全局变量污染、对象属性及原型属性优先级等许多知识点,而就其中声明提前相关的知识,我觉得也十分有参考价值: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; var getName = function () { alert (4);}; function getName() { alert (5);} // 请写出以下输出结果: Foo.getName(); getName(); // 声明提...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16