androidkotlin开发踩坑之旅(代码片段)

曾淘 曾淘     2022-12-09     308

关键词:

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就很简单了,慢慢到就熟悉了,大家毕竟都是有经验,很快的,语言其实就是换一个种姿势而已,如果大家有相应的补充,可以留言评论,也好一一添加上去,弥补文章不足,为更多的人减少时间,实现快速开发

nvue踩坑之旅(代码片段)

1.自定义组件全局main.js引入,页面App不生效,H5没问题。  解决办法:在页面直接引入使用。  importHTTP_SERVER_URL,HTTP_SERVER_URL_NO_LINEfrom‘@/config‘;import*aspartyWindowfrom‘@/api/partyWindow.js‘;importnaviSearchfrom‘../../common/comp 查看详情

vue踩坑之旅--computedwatch(代码片段)

vue踩坑之旅--computedwatch经常在使用vue初始化组件时,会报一些莫名其妙的错误,或者,数据明明有数据,确还是拿不到,这是多么痛苦而又令人忍不住抓耳挠腮,捶胸顿足啊技术点vue+element+ehcarts+vuex+vue-router问题再现data()returnopti... 查看详情

iview踩坑之旅(代码片段)

公司重构管理系统,框架定了vue,UI在element和iview之间选,element样式被吐槽丑,于是选了iview,但是,,这个坑多啊。。。废话少说,罗列了iview中容易出错或者懵逼的一些地方,希望后来的老哥们少费点头发。#环境:vue-2.5,iview... 查看详情

美团热修复robust的踩坑之旅-使用篇(代码片段)

  最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程。  一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解。  一、美团Robust的使用  ... 查看详情

python踩坑之旅其一杀不死的shell子进程(代码片段)

1.1踩坑案例踩坑的程序是个常驻的Agent类管理进程,包括但不限于如下类型的任务在执行:a.多线程的网络通信包处理和控制Master节点交互有固定Listen端口b.定期作业任务,通过subprocess.Pipe执行shell命令c.etc发现坑的过程很有意思:a.重... 查看详情

react-native真机调试踩坑指南(代码片段)

...就是起到调试桥的作用,真机调试安卓必备的工具。做RN开发一般都会安装androidstudio,在安装之初会有一个android-platform-tools选项,这个就是adb用到的东西了。安装androidstudio之后,一般情况下配置一个ba 查看详情

vue中集成blockly的踩坑之旅(代码片段)

blockly是一款可视化编辑器。blockly源码下载地址:https://gitee.com/mirrors/blockly?_from=gitee_searchblockly的文档参考网址:https://itbilu.com/other/relate/Ek5ePdjdX.html#configure-fixed-sizehttps://www.npmjs.com/package/blockly请结合以上文档来看这篇... 查看详情

android手把手带你进入android打包的多版本,多环境,多渠道的踩坑之旅(代码片段)

本文内容是基于英文版:https://laptrinhx.com/multi-version-multi-environment-and-multi-channel-packaging-of-android-3124436623/ 中文版:可以直接用google浏览器翻译上面的内容,但是google翻译起来会有点奇怪,所以还看【天然鱼】的这... 查看详情

我的踩坑之旅-代码不规范引发的“bug”

今早公司上班,老大跟我说有一个服务老是上线,下线,问我啥情况。我回想了下我的项目部署,觉得不可能会出现这个问题呀。然后各种鼓捣,倒腾了一个早上,终于找出了罪魁祸首。场景:我们的服务部署在亚马逊上。我们... 查看详情

简谈springboot3.0升级后的踩坑之旅,另附解决方案!(代码片段)

注:本文基于newbeemall项目升级SpringBoot3.0踩坑总结而来。一.编译报错,importjavax.servlet.*;不存在这个报错主要是SpringBoot3.0已经为所有依赖项从JavaEE迁移到JakartaEEAPI,导致servlet包名的修改,Spring团队这样做的原因... 查看详情

vue+electron开发踩坑记录(代码片段)

文章目录背景框架选型开发过程踩坑记录问题1vue-cli2无法使用vueclipluginelectronbuilder问题2vuecomponent调用ipcRenderer注意!!!补充:vue-cli2和vue-cli3/4的一些区别参考资料背景最近由于项目上的要求,需要开发一个... 查看详情

乐鑫esp32学习之旅30对接华为iot物联网平台适配踩坑,使用esp-idf编程使用https请求固件跳过证书校验,实现ota远程升级文件。(附带源码)(代码片段)

...础学习系列笔记1、爬坑学习新旅程,虚拟机搭建esp32开发环境,打印“HellowWorld”。2、巧用eclipes编辑器,官方教程 查看详情

day667.开发避免踩坑注意点-java业务开发常见错误(代码片段)

开发避免踩坑注意点Hi,我是阿昌,今天学习记录关于开发避免踩坑注意点的学习记录。1、第一,遇到自己不熟悉的新类,在不了解之前不要随意使用。在并发工具这提到的CopyOnWriteArrayList。如果你仅仅认为CopyOnWr... 查看详情

我的踩坑之旅-跨域问题引发bug

场景:    由于业务原因需要在请求中添加一个信息表明请求的source,经过一轮方案的评审,大家共同决定把这source信息存放在消息header中。前端小伙伴听完之后心里暗自偷笑:就一行的代码的事,请求的时候在消... 查看详情

踩坑adb——我的一次使用adb命令的踩坑之旅

...同事都叫我BUG基,你懂的),我这复现了一个问题,但是开发那边说叫我把log导出来,我这不会导,你知道怎么导吗?   作为一只BUG基,我怎么可能会放过这个装比的机会呢,哈哈。   叫肖总导log的那个开... 查看详情

游戏开发-cocoscreator踩坑-cc.loader.loadres(代码片段)

cc.loader.loadRes("sounds/music/home_scene_bg",cc.AudioClip,function(err,clip)sound_manager.play_music(clip,true););资源的url不需要写根目录resources,也不需要加文件类型后缀 查看详情

flutter开发百度地图,踩坑无数,保姆级教程(代码片段)

最近在用flutter开发百度地图,踩坑无数,可以说把能踩的坑都踩了一遍,特此记录下辛酸经历。下面描述的工程是配置Android的,ios并没有配置。开发环境:sdk:“>=2.12.0<3.0.0”AndroidStudio版本3.4.0文章目... 查看详情

clion配置stm32开发环境踩坑(代码片段)

在使用CubeMX生成了代码之后,在cion中没有自动生成Cmake文件,工程不能进行编译,检查了CubeMX生成代码的配置是没有问题的,并且检查了编译环境等配置都是没有问题的,最后把工程名子‘01.Template’改为了‘... 查看详情