摘要: 一,代码: 在activity中增加一行: getSupportActionBar()?.hide() 例子: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(17) 评论(0) 推荐(0)
摘要: 一,引入lifecycle 1,libs.versions.toml [versions] lifecycle = "2.9.1" [libraries] # lifecycle androidx-lifecycle-livedata-core-ktx = { group = "androidx.l 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(25) 评论(0) 推荐(0)
摘要: 一,安装第三方库 build.gradle.kts中添加 implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") imp 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(28) 评论(0) 推荐(0)
摘要: 一,报错信息: e: file:///Users/liuhongdi/StudioProjects/Okdemo2/app/src/main/java/com/example/okdemo2/fragment/ApiService.kt:14:67 This declaration needs op 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(92) 评论(0) 推荐(0)
摘要: 一,切换gradle版本: 选择相应的gradle版本: 实际上修改了gradle-wrapper.properties 如下: #Thu Sep 04 11:05:05 CST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrap 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(186) 评论(0) 推荐(0)
摘要: 一,报错信息: org.jetbrains.kotlin.util.FileAnalysisException: While analysing /Users/liuhongdi/StudioProjects/Okdemo2/app/src/main/java/com/example/okdemo2 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(560) 评论(0) 推荐(0)
摘要: 一,在项目中添加 Kotlin Serialization 插件和依赖 编辑libs.versions.toml,增加以下内容: [versions] kotlin = "2.0.21" kotlinxSerializationJson = "1.9.0" [libraries] # kotlin 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(140) 评论(0) 推荐(0)
摘要: 一,报错信息: FATAL EXCEPTION: main Process: com.example.okdemo2, PID: 3158 java.net.UnknownServiceException: CLEARTEXT communication to www.testit.net not 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(76) 评论(0) 推荐(0)
摘要: 一,启用 编辑build.gradle.kts android { namespace = "com.example.okdemo2" compileSdk = 35 buildFeatures { buildConfig = true viewBinding = true } 二,代码中使用 pa 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(29) 评论(0) 推荐(0)
摘要: 一,问题:android studio提示找不到注解 引入gson后, import com.google.gson.annotations.SerializedName import java.io.Serializable android studio提示找不到注解: 二,解决: 点instal 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(41) 评论(0) 推荐(0)
摘要: 一,安装第三方库 build.gradle.kts中添加 implementation("com.squareup.retrofit2:retrofit:2.9.0") implementation("com.squareup.retrofit2:converter-gson:2.9.0") imp 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(19) 评论(0) 推荐(0)
摘要: 一,添加fragment fragment的ui <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=" 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(21) 评论(0) 推荐(0)
摘要: 一,如图: 查看生成的文件: 指定为默认activity: 编辑:AndroidManifest.xml 把: <activity android:name=".MainActivity" android:exported="false" /> 替换为: <activity android:name 阅读全文
posted @ 2025-09-06 22:07 刘宏缔的架构森林 阅读(14) 评论(0) 推荐(0)
摘要: 一,创建项目 二,完成后效果 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(19) 评论(0) 推荐(0)
摘要: 一,功能 Kotlin 的委托(Delegation)特性通过语法层面的支持,简化了委托模式的实现,分为‌类委托‌和‌属性委托‌两种核心形式 类委托: 通过 by 关键字将接口或抽象类的实现委托给其他对象,避免继承的局限性 二,例子: 代码: /** * 定义一个学习接口 , 代表有学习的能力 */ 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(38) 评论(0) 推荐(0)
摘要: 一,功能 lazy 惰性初始化 的 属性初始化操作 是 提前定义好的 , 在 调用之前 自动进行初始化操作 , 如果不调用 , 则不进行初始化 ; lateinit 延迟初始化 的 属性初始化操作 , 需要 手动进行初始化 , 如果忘了初始化直接调用就会报错 ; by lazy 适用于 不可变属性 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(73) 评论(0) 推荐(0)
摘要: 一,功能 在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ; 表示我先不给一个初始值,编译期的时候也无需进行非空判断,后面我会找时机给他赋值, 即lateinit的作用为编译期在检查时不要因 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(54) 评论(0) 推荐(0)
摘要: 一,功能: ① 声明与实现 : 使用 interface 关键字声明接口 , 实现时需要重写所有的抽象成员 ( 属性 / 方法 ) ; ② 接口成员 : 接口中的 正常成员属性和成员方法默认使用 open 关键字修饰 , 接口中的抽象成员属性和抽象成员方法默认使用 abstract open 关键字 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(10) 评论(0) 推荐(0)
摘要: 一,功能 使用 abstract class 可以 定义抽象类 , 抽象类中可以使用 abstract fun 定义抽象方法 , 也可以定义普通的方法 ; 1 . 定义正常的属性和方法 : 抽象类中可以定义正常的 成员属性 和 成员方法 ; ① 正常成员属性 : 该成员属性可以是常量 , 也可以是变 阅读全文
posted @ 2025-09-06 08:39 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要: 一,功能: 使用 companion object 定义的类中的 伴生对象 , 内部的 成员 和 函数 相当于 静态成员 ; 一个类中只能有一个伴生对象 ; 伴生对象 的 成员函数 和 成员属性 , 可以直接使用类名进行访问 ; 二,例子 代码: open class OpenStudent { c 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(40) 评论(0) 推荐(0)
摘要: 一,功能 单例类简介 : 单例是保证在应用程序的内存中 , 只存在一个实例的设计模式 ; ① 饿汉式 : 这个类只要一声明对象 , 只要该类被调用到 , 不管有没有用到其单例对象 , 必须马上创建一个该单例对象 ( 类对象很饿 ) ; ② 懒汉式 : 声明类对象时 , 什么都不做 , 只有类获取单例 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要: 一,功能 as作用‌:将对象显式转换为目标类型。若类型不匹配,抛出 ClassCastException。 as?作用: 若转换失败,返回 null 而不是抛出异常 说明:将 子类对象 声明为 父类类型 , 如果要 调用 子类 特有的方法 , 必须 使用 as 运算符进行 类型转换 ; 智能类型转换 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(36) 评论(0) 推荐(0)
摘要: 一,功能 1,在 Kotlin 中 , 如果不确定一个 实例对象的类型 , 可以 使用 is 运算符进行判定 实例对象 is 判定类型 判定 实例对象 是否是 判定类型 , 如果是 返回 true , 反之 返回 false 2,智能转换(Smart Cast): 当通过 is 检查类型后,Kotl 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(35) 评论(0) 推荐(0)
摘要: 一,功能 在 Kotlin 中,使用 infix 关键字修饰的函数称为中缀函数,使用时可以省略 . 和 (),允许以更自然(类似自然语言)的语法调用函数,这种特性可以使代码更具可读性。 中缀函数必须满足以下条件: 必须是成员函数(成员方法)或扩展函数; 有且仅有一个参数,且不能有默认值; 必须显式声 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(29) 评论(0) 推荐(0)
摘要: 一,功能 泛型扩展函数 可以支持 任何类型的 接收者 ( 调用函数的实例对象 ) , 同时还可以 获取 接收者 的 泛型参数类型 ; 泛型扩展函数 格式 : 一般 泛型扩展函数 都是为了 配合 链式编程 , 其 返回值类型 就是 接收者泛型参数类型 ; 二,例子: 代码: //处理按钮点击事件 bi 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(13) 评论(0) 推荐(0)
摘要: 一,功能: 关键字reified 关键字 reified 可以让你在运行时访问在代码编译期间应该被擦除的类型信息。reified 关键字使用内联函数来执行这个任务。 如果一个函数被标记为 inline,那么无论在哪里调用该函数,编译器都会将整个函数体直接粘贴到调用处。 二,例子: 代码: inlin 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(19) 评论(0) 推荐(0)
摘要: 一,功能 有些时候, 你可能想表示你并不知道类型参数的任何信息, 但是仍然希望能够安全地使用它. 这里所谓"安全地使用"是指, 对泛型类型定义一个类型投射, 要求这个泛型类型的所有的实体实例, 都是这个投射的子类型。 对于这个问题, Kotlin 提供了一种语法, 称为 星号投射(star-proj 阅读全文
posted @ 2025-09-06 08:38 刘宏缔的架构森林 阅读(29) 评论(0) 推荐(0)
摘要: 一,功能 逆变是指在类型参数的继承关系中,允许将一个泛型类型的父类型赋值给子类型。在 Kotlin 中,我们可以使用 in 关键字来标记类型参数为逆变。这样一来,我们就可以安全地将一个泛型类型的父类型赋值给子类型。 二,例子: 逆变关键字 in 将继承关系颠倒过来,主要用来限制未知类型的子类型,编译 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要: 一,功能 协变是指在类型参数的继承关系中,允许将一个泛型类型的子类型赋值给父类型。在 Kotlin 中,我们可以使用 out 关键字来标记类型参数为协变。这样一来,我们就可以安全地将一个泛型类型的子类型赋值给父类型。 二,例子: 需要注意的地方:虽然协变放宽了对数据类型的约束,可以接受 子类型作为集 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(30) 评论(0) 推荐(0)
摘要: 一,功能 在 尖括号 <> 中声明 泛型参数 时 , 可以指定 泛型类型 的 约束 , 如 泛型类型 必须是某个类型的子类 在 Kotlin 中,使用:代替 extends 对泛型的的类型上界进行约束。传入的参数只能是指定的类型或其子类,如果是其他类型,则会报错。 二,例子 代码: //处理按钮点击 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(15) 评论(0) 推荐(0)
摘要: 一,功能 通常情况下 , 泛型参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型 函数 的 参数 或 返回值 类型为 泛型类型 , 则该函数称为 泛型函数 泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(21) 评论(0) 推荐(0)
摘要: 一,功能 first{}高阶函数: 查找等于某一个字符的第一个元素 firstOrNull()函数,它和first()函数的区别在于如果字符串为空串时,first()函数会抛出异常,而firstOrNull()函数会返回null。firstOrNull{}函数,它和first{}函数的区别在于如果字 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(8) 评论(0) 推荐(0)
摘要: 一,功能 substring函数的定义: @kotlin.internal.InlineOnly public inline fun String.substring(startIndex: Int): String = (this as java.lang.String).substring(st 阅读全文
posted @ 2025-09-06 08:37 刘宏缔的架构森林 阅读(17) 评论(0) 推荐(0)