Kotlin

分类下相关文章

Kotlin JSON 序列化

需求 将一组 key / value 的数据,生成 json 序列化后的字符串,然后上传到服务器后台。 参考 kotlin 官方文档: https://book.kotlincn.net/text/serialization.html 大致逻辑就是,先定义一个 data class,然后执行序列化操作。 代码示例 import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import kotlinx.serialization.encodeToString @Serializable da ...

阅读全文...

Kotlin ByteArray BCC 校验

在 Android App 中, 要对发送给蓝牙控制板的数据增加 BCC 校验位。此处使用 Kotlin 实现。 确认校验规则 这个取决于当前项目如何约定的校验规则,不具有普遍性。可忽略。 目前的规则是: 剔除头尾字节,及倒数第二个字节的校验位,然后对此范围的数据做 BCC 校验。 测试数据 使用收到的 BLE 数据包作为测试案例。 AB 00 06 A2 05 20 32 30 2E 37 31 AB BA 即: 00 06 A2 05 20 32 30 2E 37 31 对应的 BCC 校验位为: AB Kotlin 扩展 ByteArray 自动给一段 ByteArray 缀上 BC ...

阅读全文...

Kotlin ByteArray 元素大小范围

今天在用 Kotlin 写一段字节数据的 BCC 校验时提示错误信息。代码是: var data = byteArrayOf(0x00, 0x06, 0xA2) 报错信息: The integer literal does not conform to the expected type Byte Android Studio 中建议的写法是: 0xA2.toByte() 即 var data = byteArrayOf(0x00, 0x06, 0xA2.toByte()) 为何 0xA2 不在 Byte 的范围之内 Byte 的范围不是 0~255 么? 确实不是,byte 类型的 ...

阅读全文...

kotlin 中 object,companion object,class,data class 的区别

object a static instance of a class that there is only one of, otherwise known as a singleton 类似单例 singleton 整个 app 只有唯一一个实例 不需要创建 instance 实例,就能访问里面的属性、方法 第一次访问的时候,进行初始化,即 initialised lazily 例如: object Tool { fun checksum { // ... } } Tool.checksum() companion object compani ...

阅读全文...

Kotlin LocalDate 与时间戳相互转换

在 Android Jetpack Compose 中使用 MaterialDatePicker 返回的日期为 Long 型时间戳。 我想将其转换为 LocalDate 类型。 datepicker 返回的数据类型 1630195200000 data class convertor 存入本地数据库的数据类型 1630195200 其对应的转换函数: @TypeConverter fun dateToTimestamp(date: LocalDate?): Long? { val zoneId: ZoneId = ZoneId.systemDefault() return date?.at ...

阅读全文...

Android Room: No value passed for parameter 'id'

使用 kotlin 定义了一个简单的 Room Entity 类 Todo,代码如下: import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "todos") data class Todo( @PrimaryKey(autoGenerate = true) var id: Int, var title: String, var content: String, ) { override fun toString() = title } ...

阅读全文...

Kotlin const val 与 val 的区别

在参考 sunflower 源码时,发现其数据库名存储在一个公用文件中。 并且以全局变量 const val 类型定义,代码如下: const val DATABASE_NAME = "todo_database" 那么 const val 与 val 的区别是什么呢? const val 是编译时常量。即,必须在编译时赋值。 val 是运行时常量。可以不在编译时赋值,在运行时赋值也可以。 相关阅读 kotlin val 与 var 的区别 https://stackoverflow.com/questions/37595936/what-is-the-diff ...

阅读全文...

kotlin 的 suspend fun 函数

在看 Android Room 的示例代码时,看到一些 DAO 中的操作函数前有 suspend 关键字。例如: @Query("DELETE FROM word_table") suspend fun deleteAll() suspend 函数是 kotlin coroutine 引入的一个概念。 中文翻译 suspend, 中文意思是:挂起、推迟、悬浮。 suspend 是为解决什么问题而生 App 在发起网络请求拉取数据的同时,需要能保证用户在界面上的操作也能正常响应,界面可以刷新。 所以,就需要一套机制能保证耗时的 IO 操作,能与 UI 刷新操作同步执行。即, ...

阅读全文...

Kotlin 内置的常用数据结构 - Pair

测试代码 val p = Pair(1, 2) p.first res3: kotlin.Int = 1 p.second res4: kotlin.Int = 2 ...

阅读全文...

Koltin EditText 报错:Type mismatch: inferred type is String but Editable! was expected

为了给 EditText 控件设置初始值,用 kotlin 写了如下代码: this.input.text = "100" 没想到提示错误: 若强行编译,则会报错: Type mismatch: inferred type is String but Editable! was expected 可是我印象中 kotlin 是可以这样直接赋值的啊。。。 突然想到,莫非 EditText 不能这样搞,而 TextView 不可以。。。 测试了一下,确实是这样。改成 this.input.setText("100") 就可以了。 总结 TextV ...

阅读全文...

Kotlin 编译错误:Unresolved reference: mutableListOf

下面一段 Kotlin 代码在编译时报错: class ResultListAdapter(val resultList: mutableListOf<PercentPrice>): RecyclerView.Adapter<ResultListAdapter.ResultViewHolder>() { 报错信息为: Unresolved reference: mutableListOf 原来,mutableListOf 是一个函数方法,只能在类型 MutableList 初始化时使用。 所以,这里应该使用类 MutableList。 class R ...

阅读全文...

Kotlin 关键字 apply

看 Android RecyclerView 官方文档时 https://developer.android.com/guide/topics/ui/layout/recyclerview 看到这样一段示例代码。里面有 apply 关键字,第一次见。 recyclerView = findViewById<RecyclerView>(R.id.my_recycler_view).apply { setHasFixedSize(true) layoutManager = viewManager adapter = viewAdapter } 猜测, apply 作用域内的代码 ...

阅读全文...

如何搜索 Kotlin 对应的 Android 控件使用文档

例如,我想查找 kotlin recyclerview 相关的使用文档。 看起来这是个幼稚的问题,谁还不会用 Google 啊,但是这个问题着实困扰了我一天。 如果使用关键词 “recyclerview kotlin” 进行搜索,会发现排名靠前的都是些三方网站的教程,内容质量及代码规范性都不高。 而直接搜素 “recyclerview”,则可以直接找的 Google Android 的官方开发文档,里面同时提供了 Kotlin 和 Java 的代码示例。介绍也更靠谱。 对应的文档地址如下: https://developer.android.com/guide/topics/ui/layo ...

阅读全文...

Kotlin 变量名后面加双感叹号代表什么

在查 Kotlin 的 RecyclerView 用法时,发现一段令人费解的代码: override fun getItemCount(): Int = list?.size!! size 后面的双叹号代表什么呢? 双感叹号可以看作是程序员在当前代码行发了一个毒誓: 如果叹号前的变量为 null,就让上天抛出 NPE,让我的 Android 应用崩溃。 这是一个多么脑残的设计。。。 我都想象不出任何使用双叹号的场景。。。 测试代码 >>> var s: String? = null >>> println(s) null >>> pr ...

阅读全文...

Kotlin Data Class 结合 List 使用

示例,使用 Kotlin 计算价格 100 分别涨跌幅 10% 后的分段价格。 示例代码 prices.kt data class PercentPrice(val percent: Int, val price: Double) fun main(args: Array<String>) { println("Start!") val price = 100.0 val prices = mutableListOf<PercentPrice>() for (i in 1..10 step 1) { ...

阅读全文...