![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kotlin
大秦樗里疾
樗里疾,能打仗能外交。小码农,能写代码能写文章。
展开
-
Android Jetpack Room 的使用
官网链接 使用 Room 将数据保存到本地数据库 | Android 开发者 | Android Developershttps://developer.android.google.cn/training/data-storage/room?hl=zh_cnRoom 用于处理数据库。它在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。Google 推荐使用 Room 而不是 SQLite 。借用官网说明,Room 包含 3 个主要原创 2021-08-10 10:48:43 · 201 阅读 · 0 评论 -
Android Jetpack WorkManager 的使用
官网链接 使用 WorkManager 调度任务 | Android 开发者 | Android Developershttps://developer.android.google.cn/topic/libraries/architecture/workmanagerWorkManager 是一个 API,可供您轻松调度那些即使在退出应用或重启设备后仍应运行的可靠异步任务。WorkManager 适用于需要可靠运行的工作,即使用户导航离开屏幕、退出应用或重启设备也不影响工作的执行。例如:原创 2021-08-07 15:36:42 · 296 阅读 · 0 评论 -
Android Jetpack LiveData 的使用
官网 ViewModel 概览 | Android 开发者 | Android Developershttps://developer.android.google.cn/topic/libraries/architecture/viewmodel?hl=zh_cn#loadersLiveData 可以包含任何形式的数据,在数据发生变化时通知观察者。LiveData 一般都配合 ViewModel 使用。本文例子,一个 TextView 用于显示数据,一个 Button 点击数据加1 ,一个原创 2021-07-31 18:39:57 · 217 阅读 · 0 评论 -
Android Jetpack Lifecycle 的使用
官网镇楼 使用生命周期感知型组件处理生命周期 | Android 开发者 | Android Developershttps://developer.android.google.cn/topic/libraries/architecture/lifecycle1.添加依赖可选不带 ViewModel 和 LiveData 的 Lifecycle ,也可选带 ViewModel 。因为我的工程也用 ViewModel ,就用这个了。dependencies { // ViewMo原创 2021-07-31 17:16:14 · 243 阅读 · 0 评论 -
Android Jetpack ViewModel 的使用
官网镇楼 ViewModel 概览 | Android 开发者 | Android Developershttps://developer.android.google.cn/topic/libraries/architecture/viewmodel?hl=zh_cn#kotlinViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。ViewModel 是用于管理数据的,界面上的数据,都应该放到 ViewM原创 2021-07-31 16:45:27 · 199 阅读 · 0 评论 -
Kotlin笔记31--RecyclerView的使用
1.添加依赖在 app 的 build.gradle 中添加依赖,dependencies { implementation 'androidx.recyclerview:recyclerview:1.1.0'}2.编写布局文件写个简单的布局文件,就放一个 RecyclerView ,<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.co原创 2021-07-28 15:29:46 · 2059 阅读 · 0 评论 -
Kotlin笔记30--顶层方法
Kotlin 中的 顶层方法 是指 没有定义在任何类中的方法。新建一个 Kotlin 文件,文件类型选择 File ,新建之后,这个文件中的所有方法都是顶层方法。纳尼?好像不科学。 注意,新建的 Kotlin 文件不是类,所以它里面的方法都是顶层方法。创建顶层方法新建了 TopTest.kt ,内容如下package com.cosmos.helloworld.ktfilefun main() { }fun testTop(){ println("testTop")}原创 2021-07-27 11:39:31 · 764 阅读 · 0 评论 -
Kotlin笔记29--定义静态方法
在 Java 中,定义静态方法,只需要在方法上添加 static 关键字就可以了。Kotlin 中弱化了静态方法的概念。提供了一些语法特性来支持类似静态方法的写法。提供的写法有:单例类、companion object 。注意,单例类、companion object是静态方法的写法,不是真正的静态方法。单例类参考 Kotlin笔记15-单例_南国樗里疾的博客-CSDN博客https://blog.csdn.net/weixin_44021334/article/details/11800038原创 2021-07-27 11:13:33 · 309 阅读 · 1 评论 -
Kotlin笔记28--标准函数 with、run、apply
Kotlin 的标准函数是指 Standard.kt 中定义的函数。所有 Kotlin 代码都可以调用所有的标准函数。withwith 函数可以在连续调用一个对象的多个方法时,让代码变得更加精简。它接收 2 个参数,第一个参数是一个对象,第二个参数是一个 Lambda 表达式。with 函数在 Lambda 表达式中提供第一个参数的上下文,Lambda 表达式的最后一行作为返回值。语法为:val result = with(object){ // object 的上下文,意思就是可以在这里原创 2021-07-27 10:18:17 · 382 阅读 · 0 评论 -
Kotlin笔记27--使用Intent传递数据
接上一篇,使用 Intent 从 MainActivity 跳转到 FirstActivity ,不需要 FirstActivity 回传数据就用 startActivity,val intent = Intent(this, FirstActivity::class.java)intent.putExtra("key_from_main", "data_from_main")startActivity(intent)需要 FirstActivity 回传数据就用 startActivityF原创 2021-07-02 14:38:09 · 3703 阅读 · 0 评论 -
Kotlin笔记26--新建Activity
在原来的工程上新建一个 Activity ,创建并加载布局,再学下点击事件、页面跳转、创建 menu 菜单、弹出Toast 。1.创建 FirstActivity在原来的工程上,选中包名,右键 New – Kotlin Class/File ,类型选择 Class ,创建 FirstActivity ,如下,import android.os.Bundleimport androidx.appcompat.app.AppCompatActivityclass FirstActivity : A原创 2021-07-02 09:54:32 · 1471 阅读 · 0 评论 -
Kotlin笔记25--字符串内嵌表达式
Java 不支持字符串内嵌表达式。Kotlin 支持字符串内嵌表达式,格式参考如下,"My name is ${obj.name} ."当表达式只有一个变量时,可以省略大括号。"My name is $obj.name ."举个栗子,val name = "Steven"println("name = $name")直接观感不明显,上图,字符串内嵌表达式,用起来比 + 号拼接字符串方便多了。如一个数据类 MobilePhone,重写它的 toString() 方法,不用字符串内原创 2021-06-26 16:29:25 · 363 阅读 · 2 评论 -
Kotlin笔记24--辅助工具let函数
let 函数是 Kotlin 的标准函数,它提供了函数式 API 的编程接口,并将原始对象作为参数传递到 Lambda 表达式中。格式如下:obj.let { obj -> // 具体的执行代码}示意说明:调用了 obj 对象的 let 函数,然后 obj 对象本身作为参数传入 Lambda 表达式,执行具体的代码逻辑。接前文的判空辅助工具 ?. ,配合 let 函数使用,效果好极了。如下代码,fun testString(string: String?){ prin原创 2021-06-26 16:08:21 · 1285 阅读 · 0 评论 -
Kotlin笔记23--判空辅助工具
接前文 Kotln笔记22–可空类型系统_南国樗里疾的博客-CSDN博客https://blog.csdn.net/weixin_44021334/article/details/118161619为了预防空指针异常,要判空。Kotlin 中有判空辅助工具。常用的是 ?. ,意思是当对象不为空时正常调用,为空时什么都不做。修改前, fun doStudy(study: Study?){ if (study != null){ study.readBooks原创 2021-06-23 20:49:26 · 244 阅读 · 2 评论 -
Kotlin笔记22--可空类型系统
参考之前的例子Kotlin笔记12–接口_南国樗里疾的博客-CSDN博客https://blog.csdn.net/weixin_44021334/article/details/117931362假设封装了一个方法,fun doStudy(study: Study){ study.readBooks() study.doHomeWork()}乍一看,没问题,细想下,如果传入的参数是 null ,不就空指针异常看吗 ?简单,改进下,fun doStudy1(study: St原创 2021-06-23 20:28:28 · 129 阅读 · 0 评论 -
Kotlin笔记21--Java函数式API
在 Kotlin 中调用 Java 方法时也可以使用函数式API ,不过有一些限制。Kotlin 中调用了 Java 方法,如果该方法接收一个 Java 单抽象方法接口参数,就可以使用函数式API ;Java 单抽象方法接口 指的是接口中只有一个待实现的方法。如果接口中有多个待实现方法,则无法使用函数式API 。好像能理解,只有一个待实现的方法的话,像 Lambda 表达式那样简化一下就可以了。举个栗子,Java 中新建线程,这里采用匿名类的写法,new Thread(new Runnable原创 2021-06-22 14:57:31 · 188 阅读 · 0 评论 -
Kotlin笔记20--集合的函数式API-- any函数和all函数
any 函数用于判断集合中是否至少包含一个满足条件的元素。对应 至少有一个满足 。all 函数用于判断集合中是否所有元素都满足条件。对应 全部满足。举例子,判断几个是否包含 A 开头的元素。val list = listOf("Apple", "Banana", "Cherry", "Durian", "Orange", "Pear", "Watermelon")val a1 = list.any(){ it.startsWith("A")}val a2 = list.all { it.start原创 2021-06-21 20:45:30 · 574 阅读 · 2 评论 -
Kotlin笔记19--集合的函数式API--filter函数
filter 函数是用来过滤集合中的数据,可以单独使用,也可以和 map 函数一起使用。单独使用简单例子,只保留5个字母以上的元素。val list = listOf("Apple", "Banana", "Cherry", "Durian", "Orange", "Pear", "Watermelon")val newList1 = list.filter { it.length > 5 }for (i in newList1) println(i)运行结果,BananaCher原创 2021-06-21 20:38:19 · 1034 阅读 · 0 评论 -
Kotlin笔记18--集合的函数式API--map函数
这里说的 map 函数和集合 Map 是两回事,不要混淆!集合的函数式 API ,常用的就是 map 函数,这里罗列一些功能。转为大写小例子,将集合中的元素都变成大写。val list = listOf("Apple", "Banana", "Cherry", "Durian", "Orange", "Pear", "Watermelon")val newList1 = list.map { it.toUpperCase() }val newList2 = list.map { it.toUpp原创 2021-06-21 20:27:56 · 1098 阅读 · 0 评论 -
Kotlin笔记17--集合的函数式API之Lambda表达式
主要学习下 Lambda 表达式。一个小例子,找到某个集合中名字最长的元素。val list = listOf("Apple", "Banana", "Cherry", "Durian", "Orange", "Pear", "Watermelon")var longerName = "";println("longerName = $longerName")println("longerName.length = " + longerName.length)for (item in list)原创 2021-06-21 19:48:40 · 175 阅读 · 0 评论 -
Kotlin笔记16--集合
集合一般指 List 、Set 、Map 。不可变集合不可变集合,只能读取,不能执行添加、修改和删除操作。类似 val 和 var 。类似 Java 的写法, val list = ArrayList<String>() list.add("A") list.add("B") list.add("C") list.add("D")有点麻烦,Kotlin 的写法就很简单,再加个 for 循环遍历下。 val list1 = listOf("A","B"原创 2021-06-17 20:21:05 · 135 阅读 · 1 评论 -
Kotlin笔记15-单例
单例一般用作工具类,集中处理某些操作。不过要注意下,避免单例导致的内容泄露。(说一下,这里不展开了)单例有懒汉式、饿汉式、DCL等写法。Java 中的单例,package single;public class DCLLazyMan { private static DCLLazyMan dclLazyMan; private DCLLazyMan(){ System.out.println(Thread.currentThread().getName() +原创 2021-06-17 19:44:22 · 213 阅读 · 0 评论 -
Kotlin笔记14--数据类
Java 中的数据类,一般都是 Java been 形式的。常见的写法,package com.cosmos.helloworld;import androidx.annotation.NonNull;import androidx.annotation.Nullable;public class MobilePhone { String model;//型号 int price;//价格 public MobilePhone(String model, int p原创 2021-06-17 19:29:14 · 264 阅读 · 0 评论 -
Kotlin笔记13--修饰符
Java 中的修饰符 4 种,分别是 public 、 private 、 protected 、 default 。Kotlin 中的修饰符也是 4 种,分别是 public 、 private 、 protected 、 internal 。两者的对比,修饰符JavaKotlinpublic所有类可见所有类可见(默认)private当前类可见当前类可见protected当前类、子类、同个包下的类可见当前类、子类可见default同个包下的类原创 2021-06-17 16:58:50 · 105 阅读 · 0 评论 -
Kotlin笔记12--接口
Java 是单继承、多接口的。Kotlin 也一样。用 AS 新建一个类,类型选择 Interface ,interface Study { fun readBooks() fun doHomeWork()}在接口中添加两个函数。简单验证下。写一个父类。写父类是为了方便看继承和接口的写法差异。open class Person { var name = "" var id = 0 fun work(){ println("$name原创 2021-06-15 19:28:49 · 1153 阅读 · 3 评论 -
Kotlin笔记11--次构造函数
Kotlin 中一个类只能有一个主构造函数,可以有多个次构造函数。次构造函数也可以实例化一个类。次构造函数有函数体。父类,open class Person2 (val name: String, val id : Int){ init { println("Person2 init") } fun work(){ println("$name is working. He's id is $id") }}子类,class S原创 2021-06-08 15:31:06 · 462 阅读 · 0 评论 -
Kotlin笔记10--有参构造函数
回顾下无参构造函数,父类,open class Person { var name = "" var id = 0 fun work(){ println("$name is working. He's id is $id") }}子类,class Student1(val sno:String, val score:Int) : Person() { init { println("Student1 init")原创 2021-06-08 15:02:36 · 642 阅读 · 0 评论 -
Kotlin笔记9--无参构造函数
Kotlin 的构造函数分为主构造函数和次构造函数。主构造函数是我们常用的构造函数。每个类默认有一个不带参数的主构造函数。我们也可以显示的指明它的参数。主构造函数没有函数体,直接定义在类名后面。示例,class Student1(val sno:String, val score:Int) : Person() {}这样,初始化的时候必须传入构造函数中的所有参数,如val s1 = Student1("sno1", 66)主构造函数没有函数体,如果想在主构造函数中添加一些逻辑,就用原创 2021-06-08 10:38:44 · 2099 阅读 · 1 评论 -
Kotlin笔记8--继承
继承是面向对象的特性。Kotlin 中的非抽象类,默认都是不可被继承的。要让类可继承,在类前加上 open 关键字。如之前的例子 Kotlin笔记7–类和对象_南国樗里疾的博客-CSDN博客https://blog.csdn.net/weixin_44021334/article/details/117689273已经创建了 Person 类,加上 open 关键字,让它可继承。package com.cosmos.helloworldopen class Person { var原创 2021-06-08 09:52:58 · 145 阅读 · 0 评论 -
Kotlin笔记7--类和对象
新建一个 Student 类,简单声明两个成员变量和一个方法。package com.cosmos.helloworldclass Student { var name = "" var id = 0 fun study(){ println("$name is studying. He's id is $id") }}在 main() 函数中实例化并进行一些操作,package com.cosmos.helloworldfun main原创 2021-06-08 09:22:55 · 102 阅读 · 0 评论 -
Kotlin笔记6--for循环语句
Kotlin 的 for 循环和 Java 的差别在:Java 用 for -i 的形式,Kotlin 用 for - in 、 until 、downTo 的形式。for - in 形式适用于升序区间。for - in 形式,两端都是闭区间 。所谓闭区间,就是两端包含在区间内。如 [0,5] 闭区间包括 0 和 5 。fun main(){ for (i in 0..10){ println(i) }}运行结果是,0123456789原创 2021-06-07 21:48:02 · 592 阅读 · 1 评论 -
Kotlin笔记5--while条件语句
Kotlin 的 while 循环和 Java 的 while 循环时一样的。示例,fun main(){ var j = 0 while (j < 5){ println(j) j++ }}运行结果,01234原创 2021-06-07 21:32:23 · 132 阅读 · 0 评论 -
Kotlin笔记4--when条件语句
Kotlin 的 when 类似于 Java 的 switch 。用 if 写的话,是这样的,fun getStudentScore(name: String) = if (name == "James") { 98} else if (name == "Wade") { 97} else if (name == "Harden") { 96} else { 60}Kotlin 中判断字符是否相等可以直接用 == 。当判断条件比较多时,适合用 when ,上原创 2021-06-07 21:22:08 · 1959 阅读 · 0 评论 -
Kotlin笔记3--if条件语句
用个简单的例子说明,返回两个数中的较大者。学过 Java 的一般这样写,没问题。fun getBiggerNum(num1 : Int, num2: Int) : Int { if (num1 > num2) { return num1 } else{ return num2 }}AS 会在 if 那里报黄,按照提示修改后,fun getBiggerNum(num1 : Int, num2: Int) : Int { retu原创 2021-06-07 20:30:50 · 184 阅读 · 0 评论 -
Kotlin笔记2--变量和函数
变量val (value 的简写)关键字用来声明一个不可变的变量,初始化赋值后不可重新赋值,对应 Java 中的 final 变量 。var (variable 的简写)关键字用来声明一个可变的变量,初始化赋值后还可以重新赋值,对应 Java 中的非 final 变量。写个简单的定义变量然后赋值的 demo , 再做个简单运算和打印package com.cosmos.helloworldfun main(){ var a = 10 var sa= "str_a" va原创 2021-06-07 20:10:04 · 256 阅读 · 0 评论 -
Kotlin笔记1--用AS运行Kotlin代码,打印Hello Kotlin
New 一个 Kotlin project 之后,在 MainActivity 同级目录下新建一个 MyKotlin.kt 文件,(注意,是文件,不是类Class)用来运行 Koltin 代码。AS 会自动导包名,编写一段 Hello Kotlin 代码,简单写一个 main 方法,package com.cosmos.helloworldfun main(){ println("Hello Kotlin")}main 方法左侧有个三角形,点击三角形即可运行我们的 main 方原创 2021-06-07 19:35:00 · 789 阅读 · 0 评论