Android Kotlin 开发踩坑之旅
Posted 曾淘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Kotlin 开发踩坑之旅相关的知识,希望对你有一定的参考价值。
Kotlin 介绍
Kotlin是JetBrains开发的基于JVM的语言。JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,研发了IntelliJ IDEA这款相对于Eclipse有较大改善的大名鼎鼎IDE产品,使用Java开发的童鞋想必也是非常了解了
使用 Kotlin 有什么好处?
1.更简洁
相比Java显得更加简洁,代码量减少了很多,比如when,with,apply等语法。
2.更安全
Kotlin是空安全的,它在编译期间就会处理各种为null的情况,很明显,可以很大程度上减少NullPointException的出现,让程序更加的安全。
3.易扩展
扩展函数并不是我们不仅可以扩展我们原有写好的类,还可以扩展系统级的类,非常灵活,另外如果在类里编写扩展函数,那么只对当前类生效。而且,函数里面还可以写函数等。
4.跟findViewById()说拜拜
这个一看到大家就很清楚,就是我们不用在去写findViewById(),去除了反复等操作,如果你使用了ButterKnife,那么很好,你也可以跟它说再见了,当然这里面,会存在一个很坑爹的问题,接下来会仔细说说的
5.不用写分号
这点有点蛋疼,因为你习惯了Java,要写分号,然后你会习惯性添加,就会非常难受
如何使用Kotlin?
接下来,我会说一下怎么接入kotlin,然后慢慢的你就可以准备入手开发了
配置kotlin步骤:
1.在项目外层的build.gradle中配置如下:
buildscript
ext.kotlin_version = '1.2.30'
2.同样在项目外层中配置:
dependencies
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
3.在内部app的build.gradle中配置
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
这样就完成了所有的配置了
那么
接下来
就可以进行正式的开发了
怎么快速开发?
没办法,这个是必须面对的,我就直接说,不吹牛逼了
滴!滴!滴!
老司机开车了
步骤
1.快速扫描文档,包括语法,重点,变量,类,方法,够了,花不了多少时间吧,下一个
2.不会直接写?没关系,新建一个Java文件,用Java编写好单独的某个逻辑操作,复制到一个.kt文件,然后就会生成kotlin代码了,当然这种还是有些会转失败了,还需要自己稍微修改一下,然后OK了
3.最重要的点就是,编写边百度,或者谷歌,这些会给你圆满答复的,不用永远停留在看,想,这一层次,行动永远是解决真理的唯一道理
以上呢
准备工作都已经做好了
Kotlin 踩坑经验集
1.当Fragment碰到Kotlin
哎,这个我刚开始测试的时候,都没有发现这个问题,真正实战了,才发现都,那就是,渲染ui或者给view添加各种事件都时候,
一定要在onViewCreated 中初始化
一般我们都是在onCreateView中就可以进行初始化了,然后开始做所有操作,包括
1。初始化数据
2。初始化点击时间
3。渲染ui
4。。。。
你会发现,然后game over 了
why?
因为kotlin自己做了findViewById的时候,用一个id,比如
text_xxx.setOnClickListener(this)
text_xxx.text = "Hello Word"
的时候,是需要用view.find的,指向这个id,但是这个时候,如果在其它时候,fragment还没有返回view,所以,不好意思,就会出现NullPointException
小伙伴们可以自行尝试
当然如果这个是在Actvity里面是不存在的
2.当Dagger碰到Kotlin
当Dagger碰到Kotlin会发生什么呢,就是在传递参数当时候,你会发现,
@Autowired 使用这个的时候,你不管怎么样,都不行,报错,还是报错
解决办法:添加@JvmField
3.静态函数
你会发现,在kotlin中不存在静态函数这一说,你根本不能不new对象才行,那么咋搞,不会这么low吧,这么简单的东西,都不行?
解决办法:companion object 伴随 如下
companion object
fun create(str: String): XXXFragment
val fragment = XXXFragment()
return fragment
4.当某个对象当属性
a.name?:""
a.list?.size()?:0
也就是,?,问一下前面结果是不是null的
5.多使用apply,with语句
val ss = xxx().apply
name = "张三"
number = 15
var ss = xxx()
with(ss)
name = "张三"
number = 15
这种被称之为代码块,让你看起来,感觉就是一起的,形成鲜明的对比,就是在一起的
6.常量定义
比如,某些东西是固定的,但是有想方便统一管理
这个时候就需要这样搞
interface RouterConstant
interface aa
companion object
const val PATH = "/aa/login"
interface bb
companion object
const val PATH = "/bb/login"
当然也可以这样搞
interface RouterConstant
object aa
const val PATH = "/aa/login"
object bb
const val PATH = "/bb/login"
7.构造函数
constructor
constructor(str: String)
constructor(str: String ,a : Int)
constructor(str: String ,a : Int , money : Double)
当然如果有注解什么的,一定要写在这个构造函数之前,比如
@Inject constructor
@Inject constructor(str: String)
@Inject constructor(str: String ,a : Int)
@Inject constructor(str: String ,a : Int , money : Double)
总结
有关于Kotlin在Android的使用暂时就到这里了,基本上已经够用了,开发不成问题了,在把以前的Java代码逻辑转Kotlin就很简单了,慢慢到就熟悉了,大家毕竟都是有经验,很快的,语言其实就是换一个种姿势而已,如果大家有相应的补充,可以留言评论,也好一一添加上去,弥补文章不足,为更多的人减少时间,实现快速开发
以上是关于Android Kotlin 开发踩坑之旅的主要内容,如果未能解决你的问题,请参考以下文章
Android手把手带你进入android打包的多版本,多环境,多渠道的踩坑之旅