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

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

简介

主要会通过安卓实战来讲解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方法

  1. 然后让我们再回到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三个核心层次不同的接口定义,其实就是面向接口编程的一种标准形式


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

kotlin实战交流群群二维码.png
相关文章
|
15天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
56 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
4月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
186 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
8月前
|
Android开发 开发者 Kotlin
Android实战经验之Kotlin中快速实现MVI架构
MVI架构通过单向数据流和不可变状态,提供了一种清晰、可预测的状态管理方式。在Kotlin中实现MVI架构,不仅提高了代码的可维护性和可测试性,还能更好地应对复杂的UI交互和状态管理。通过本文的介绍,希望开发者能够掌握MVI架构的核心思想,并在实际项目中灵活应用。
343 8
|
9月前
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
153 9
|
10月前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
118 2
|
12月前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
182 1
|
12月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
189 4
|
12月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
257 1
|
11月前
|
前端开发 Android开发 UED
安卓应用开发中的自定义控件实践
【10月更文挑战第35天】在移动应用开发中,自定义控件是提升用户体验、增强界面表现力的重要手段。本文将通过一个安卓自定义控件的创建过程,展示如何从零开始构建一个具有交互功能的自定义视图。我们将探索关键概念和步骤,包括继承View类、处理测量与布局、绘制以及事件处理。最终,我们将实现一个简单的圆形进度条,并分析其性能优化。
|
Java 区块链 Android开发
使用Kotlin高效地开发Android App(一)
使用Kotlin高效地开发Android App(一)
803 0
使用Kotlin高效地开发Android App(一)

热门文章

最新文章