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探索之旅(第三十五篇)Kotlin知识整集

Android手把手带你进入android打包的多版本,多环境,多渠道的踩坑之旅

快应用开发的踩坑之旅

Kotlin编程开发Android运用程序(Volley+Gson依赖库)

Flutter踩坑之旅

Android接入微信支付之-1错误码踩坑之旅