Kotlin
文章平均质量分 83
kotlin语言专栏
李小白lt
kotlin yyds
展开
-
Kotlin的各种骚气语法
这种操作称为柯里化,其原理就是一个方法调用后又返回了一个方法,然后调用这个返回值后又返回了一个方法,也属于高阶函数。返回了 ()->方法 , 而这个方法的签名是 ()->Unit , 连续调用了三次后获取到最后的Unit返回值。但其实这种是重写的操作符,分别是重写了setter和getter,类似于list[0]=1这样。注意看这两个示例方法的返回值,login2 比 login1的返回值短的多,但其实他们是一样的。于是我们可以通过import并设置别名,这样就可以区分开来了。原创 2024-02-29 21:48:07 · 945 阅读 · 0 评论 -
Compose State的各种转换
很简单,就一个方法但是也得注意,上面的方法是针对泛型的,如果只是基本数据类型,推荐使用相应的方法,在JVM上可以减少拆装箱带来的消耗1.使用 MutableState 的对象,通过控制 MutableState 对象的 value 属性来获取和设置值2.使用 MutableState 的解构声明,获取 value 和 setValue(高阶函数) 来使用可以看到其声明,value 和 setValue 就对应 component1 和 component2 方法3.使用属性代理。原创 2023-12-26 18:39:47 · 114 阅读 · 0 评论 -
Gradle同步任务一直不动问题(非网络情况)
最近更新ComposeViews的Kotlin和Compose版本时遇见一个问题,Gradle同步时始终会卡在一个位置,同步了一晚上也没用原创 2023-08-01 11:09:46 · 216 阅读 · 0 评论 -
Kotlin空安全类型之平台类型
众所周知,Kotlin的空安全很方便,能避免绝大部分的空安全问题一般类型分为:可空类型如 String?不可空类型 String其中可空类型的String?可以赋值null或String类型的值,在使用时必须显式的进行空处理而不可空类型的String,只能赋值String类型,无法向其赋值null,使用时无需空处理,也不会遇见空指针异常但为什么我上面说能避免绝大部分的空安全问题呢?是因为Kotlin为了兼容其他语言,还有对应语言平台的平台类型 String!原创 2023-07-25 21:38:16 · 298 阅读 · 0 评论 -
检查kotlinx-serialization-json的bean类是否都加了@Serializable注解
json解析框架有很多,但Kotlin跨平台只能使用kotlinx-serialization-json而官方没有提供检查是否bean类都加注解,或者一键给某个包自动加注解的功能,导致可能会出现运行时的崩溃,所以我们可以自己用ksp写个程序来检查一下。原创 2023-06-21 22:30:00 · 275 阅读 · 0 评论 -
Kotlin跨平台的网络请求框架-跨平台的Retrofit
一般安卓开发中网络请求框架都是使用OkHttp+Retrofit,但其只能应用于jvm平台上而Kotlin可用于jvm,js,native因此一个Kotlin跨平台的网络请求框架必不可少而ktor-client是Kotlin官方提供的网络请求框架,可以跨平台的进行网络请求与之对应的还有ktor-server可以用来写服务器端(但这不是这篇文章的重点)但ktor-client使用起来还是稍微有些麻烦,所以我们可以模仿Retrofit开发一个更方便使用的跨平台网络请求框架。原创 2023-05-31 21:45:00 · 1111 阅读 · 0 评论 -
解决Kotlin/Native报错:There is still an unbound symbol after generation of IR module <xxx>:
报错信息There is still an unbound symbol after generation of IR module :Unbound public symbol IrSimpleFunctionPublicSymbolImpl: xxx原创 2023-03-31 23:49:22 · 176 阅读 · 0 评论 -
使用MavenCentral发布Kotlin多平台库的远程依赖(KMM,KMP)
开发者可能都会做自己的开源库,像我以前只做一些单平台的,如Android或JVM平台,这时候直接使用jitpack即可,很简单就能发布远程依赖而现在Kotlin可以通过expect来实现原生多平台项目(或库),这时我们开发出来一个多平台的库,可以使用MavenCentral来发布原创 2023-02-25 23:24:10 · 544 阅读 · 0 评论 -
Compose之跨平台Activity页面
我们可以使用Kotlin expect来关联Android的Activity和Desktop的Compose fun(或Window),写一个统一的类BaseComposeActivity这样BaseComposeActivity在Android中就映射为一个真正的Activity,而在Desktop中映射为一个Compose fun,方便我们进行页面导航原创 2023-01-31 14:28:23 · 1281 阅读 · 0 评论 -
Kotlin如何延时准确的循环执行事件,比如倒计时或每一秒执行一次事件
延时循环执行事件很简单,且有很多方式,但想要延时相对精确,就需要稍微设计一下了,众所周知我们常用的操作系统都不是实时操作系统,比如Windows,Linux,Android等,所以我们上面的延时操作不管是Thread.sleep(1000)还是delay(1000)都不一定会在1000毫秒后恢复,我们测试一下原创 2022-12-11 20:51:03 · 4211 阅读 · 0 评论 -
解决<get-metadataDependencyResolutions>(...) must not be null的问题
直接搜(...) must not be null在各种搜索引擎上都无法搜索到具体内容,后来搜了下transformCommonMainDependenc这个task[org.gradle.internal.buildevents.BuildExceptionReporter] Execution failed for task ':beans:transformCommonMainDependenc原创 2022-11-21 15:01:56 · 1202 阅读 · 0 评论 -
使用KSP处理注解和生成Kotlin代码
ksp是Kotlin 符号处理工具,类似于kapt(apt),可用于开发轻量级编译器插件.也可以理解为注解处理和编译时代码生成工具(也能处理所有文件,不止被注解标记的)既然有了kapt(apt),为什么还要有ksp?速度比kapt更快,性能更好对kotlin的支持更好适用于Kotlin Multiplatform可以直接生成kotlin代码文件(实际上可以生成任意类型的文件)原创 2022-10-24 09:03:37 · 3185 阅读 · 2 评论 -
Compose中的RefreshLayout
Compose库中是没有原生的类似RefreshLayout的布局的于是我们来自己实现一个RefreshLayout。原创 2022-09-29 22:24:00 · 1076 阅读 · 2 评论 -
分析Jetpack Compose动画内部是如何实现的
Compose的动画Api用起来很简单,效果看起来很神奇,那么它内部到底是如何运转的呢?我们去看看Jetpack Compose动画(animate)Api内部的实现原理我们主要就看一下animateDpAsState(animate*AsState)做了什么跟一下animateDpAsState最后会走进animateValueAsState方法中.........原创 2022-08-31 17:14:41 · 850 阅读 · 0 评论 -
Compose中的FlowLayout
Compose库中是没有原生的类似FlowLayout的布局的,于是我们来自己实现一个FlowLayout原创 2022-07-19 20:00:00 · 754 阅读 · 0 评论 -
Compose中的“ViewPager“和Banner
Compose中简单易用的"ViewPager"(ComposePager)和Banner原创 2022-07-19 11:05:43 · 1174 阅读 · 0 评论 -
Compose中更灵活易用的TextField以及密码输入框
JetpackCompose中的TextField简单用起来很方便,但如果要自定义ui就不好实现了,我们看一下效果TextField类似的还有OutlinedTextField他们都有共同的api和特点,简单使用很方便,但是其有很大的内边距不好调整,且其背景ui也不太好调整(背景可以改成透明,但间距我查看源码也没改成...)幸亏Compose中预留了基础的输入框实现没有边距,没有背景,很适合我们自定义ui,所以我就根据BasicTextField封装了一下,使ui更简单易用。...原创 2022-07-18 19:15:16 · 3420 阅读 · 2 评论 -
Compose-jb图片加载库load-the-image,适用于KMM Compose desktop桌面端(Windows,Linux,MacOs)
Android平台上有很多优秀的图片加载框架,比如Glide,Picasso,Fresco而Compose-jetpack上的图片加载框架有Coil但Compose-jb上却暂时没有图片加载框架,正好我有用Compose-jb写一些小工具,有图片加载的需求,于是就仿照Android平台的图片加载库写了一个具有简单功能的图片加载库项目已开源,地址: load-the-image (github.com) 欢迎star功能1.简单的支持多个桌面平台的图片加载(部分格式异步加载)2.支持多种格式:网络链接,本地文原创 2022-06-10 17:21:23 · 1720 阅读 · 4 评论 -
JVM中性能更好的ArrayList<Int>
前言众所周知,kotlin中有ArrayList<Int>,Array<Int>,IntArray,可他们都有什么区别呢?为什么要有这么多大致相同的类型?正文我们先看一下他们相对于jvm中的类型ArrayList<Int> = ArrayList<Integer>Array<Int> = Integer[]IntArray = int[]可以看出来前面两种都用到了int的包装类型Integer,而IntArray是用的基原创 2022-05-31 16:58:30 · 483 阅读 · 0 评论 -
Compose实现状态选择器(原生drawable select标签效果) InteractionSource
前言在Compose中做drawable shape是很方便的,比如加个圆角,加个边框之类的,只需要如下:shape: Surface( shape = MaterialTheme.shapes.large, color = Color.Gray, modifier = Modifier.size(50.dp) ) { }原创 2022-04-28 17:25:13 · 2734 阅读 · 2 评论 -
Kotlin1.6.20好用的新特性:多receiver扩展函数,绝不可空类型,并行编译kotlin减少编译时间
前言最近kotlin1.6.20新版本出来了,并带来了几个很好用的特性,来尝尝鲜正文1.多receiver扩展函数kt的扩展函数大家应该都懂,但什么是receiver呢?比如下面的代码,是给View扩展的,View就是这个receiver的类型,而this@click就是这个receiver对象fun View.click(onClick: (View) -> Unit) { setOnClickListener { onClick(this@click)原创 2022-04-08 22:00:48 · 2940 阅读 · 0 评论 -
KMM Kotlin expect的几种声明方式
前言Kotlin的expect关键字一般用在多平台上,比如在多平台项目中的common中声明方法签名,然后由不同的平台去实现该方法,从而实现一个多平台(跨平台)方法.创建KMM项目可以参考:KMM(二)+Compose(二) 开发一个Kotlin多平台应用_滔lt的博客-CSDN博客正文接下来就说一下Kotlin expect的几种声明方式1.顶层函数和顶层扩展函数在commonMain文件夹中声明:在androidMain(和其他平台)文件夹中实现:声明并实现后,.原创 2022-03-17 23:37:40 · 3607 阅读 · 2 评论 -
KMM+Compose 开发一个Kotlin多平台应用
前言现在跨平台开发框架有很多,比如H5类型,RN,Flutter等,而Kotlin多平台+Compose跨平台ui可能也是未来一种好用的开发框架ps:后文KMM都是指Kotlin多平台框架,而不是单指Kotlin Multiplatform Mobile虽然目前KMM还有些不太成熟,Compose跨平台的支持平台不太全,单也不妨碍现在来尝尝鲜.ps:Compose-android正式,Compose-desktop正式,Compose-web未正式,Compose-ios期待中...项目原创 2022-03-15 21:45:00 · 6815 阅读 · 0 评论 -
使用Kotlin写脚本
前言Kotlin不仅可以用来写Android,也可以写后端,Desktop桌面程序,脚本(和未来的ios,网页,native等)比如开发时使用Gradle的build.gradle也可以使用kotlin脚本编写,只需要将后缀改为kts即可声明为kotlin脚本文件,如build.gradle.kts,迁移指南:迁移gradle至kts可以说kotlin的功能非常的全,基本学会一门语言吃遍天下了那普通的脚本如何用kotlin来写呢?配置首先需要下载安装jdk并配置一下jdk的环境变量:原创 2022-02-28 21:15:00 · 4442 阅读 · 0 评论 -
超简单-用协程简化你的网络请求吧,兼容你的老项目和旧的网络请求方式
前言在Kotlin协程(后简称协程)出来之后,颠覆了我们很多工具类的封装方式,大大简化了我们很多api的调用,并且使异步操作逻辑更清晰了其中一个很标志性的地方就属网络请求了,以前的网络请求方式声明很麻烦,请求和响应也很麻烦,总结一句话就是啰嗦且易出错ps:最终的使用方式示例:比如使用网络请求的进化过程:1.从一开始的HttpURLConnection的一把梭,直接一个请求写一串代码(代码太多就不写了)2.到后续使用三方封装的网络框架,如XUtils,Volly,OkHttp等,这原创 2021-12-31 17:23:37 · 2246 阅读 · 0 评论 -
Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘
前言JetPack Compose (后续简称compose) release版已经出来了三四个月了,虽然没正式版之前也学过几次,但一直没有机会用,在加上api的变更,导致之前学的都忘完了,现在终于有机会写一点(将原有项目的简单页面用compose重写),发现了一些compose的优势和劣势:优势:1.超容易封装和组合,相对于原生自定义组合view,compose组合一个view简直不要太简单,只需要一个方法就能搞定,封装也更简便好用(组合vs继承)2.跨平台,目前kotlin的跨平台,co原创 2021-11-17 17:52:25 · 4817 阅读 · 2 评论 -
KMM 搭建环境,并运行安卓和ios
前言kmm是Kotlin Multiplatform Mobile(kt移动跨平台)的缩写,虽然目前还不是正式版本,但也是可以用了kmm的跨平台实现方式是将代码分成三块:安卓原生代码ios原生代码kotlin共享代码,其中在安卓部分会将kotlin共享代码编译为jvm文件并当做lib加入到安卓原生代码中,而ios则是将kotlin共享代码编译成native(oc?)代码,然后当做framework引入(图引自kt官网)这样既可以跨平台,又保证了平台灵活性,并且性能相对于flu原创 2021-11-07 01:37:48 · 5676 阅读 · 0 评论 -
Kotlin-如何创建一个好用的协程作用域
前言kotlin中使用协程,是一定要跟协程作用域一起配合使用的,否则可能协程的生命周期无法被准确控制,造成内存泄漏或其他问题.我们一般在安卓项目中使用协程作用域,可能会在BaseActtivity中new 一个MainScope(),并在onDestory时cancel掉,或者只在ViewModel中使用viewModelScope,然后会在ViewModel的onClose中自动cancel掉.但我们可能不只需要这些效果,比如在协程作用域中拿到Context或Activity,或者需要统一的捕原创 2021-10-30 17:06:08 · 1990 阅读 · 0 评论 -
更易于使用的Retrofit(不用写注解)
1.处理如果参数不加任何注解,则默认是@Field,并且value为参数名,因为添加了kt反射,检查一下那个传入注解数组到底是干啥的,有没有影响2.POST注解自带FormUrlEncoded注解,可以在第二个参数isUseFormUrlEncoded设置为false............原创 2020-09-29 17:30:24 · 882 阅读 · 2 评论 -
分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
前言刚开始正式学协程原理的时候(以前只是学api怎么用),大概是20年5月,也就是bennyhuo大佬出书<深入理解Kotlin协程>的时候,我买了本然后细细研究,我的内心就一直有一个问题,协程只挂起不恢复会不会造成协程的内存和程序泄漏,然后加了bennyhuo大佬的群,问了协程会不会泄漏,结果没回答我,后来想想应该是我问的不够具体(直接问一个会不会泄漏怎么回答2333)...原创 2021-01-15 22:02:29 · 636 阅读 · 5 评论 -
动手实现Kotlin协程同步切换线程,以及Kotlin协程是如何实现线程切换的
前言突发奇想想搞一个同步切换线程的Kotlin协程,而不用各种withContext(){},可以减少嵌套且逻辑更清晰,想实现的结果如下图:分析实现我们想要的结果,首先需要知道协程为什么可以控制线程的切换以及在挂起函数恢复的时候回到原来设定的线程中ps:挂起函数比普通函数多出了两个操作:挂起和恢复,具体参考:https://blog.csdn.net/qq_33505109/article/details/109066392其实控制线程切换是协程库内内置的一个拦截器类:Continu原创 2021-01-14 18:09:32 · 3073 阅读 · 4 评论 -
Kotlin 协程 + Spring webflux 开发后端
前言后端响应式是未来,吞吐量会更大,而资源占用更少,其用到了类似Android系统的Loop(事件循环)机制,而协程可以减少线程等待的消耗,并且同步式的编程方式使代码可读性更高,两个仿佛天生就是一对,所以就来简单的了解并配置一下Kotlin 协程 + Spring webflux的后端项目正文项目配置采用Gradle(毕竟我是做Android开发的,所以一切亲Android体系),数据库用的Mysql首先settings.gradle.kts文件,项目名暂定JavaKjrootProj原创 2020-11-12 17:56:52 · 2650 阅读 · 4 评论 -
Kotlin协程在项目中的实际应用
前言本来我想写个协程三部曲,但是查了下貌似协程x的api和协程基础讲的比较多了,但是实战讲的很少,或者将实战也只是怎么用别人封装好的三方库对应的支持(retrofit,ViewModel,room等),这种还是只能算是对api的应用,如果让自己写一套,也是比较困难,于是直接写实战了ps:下面所说的协程专指Kotlin协程pps:本篇文章针对有协程基础api和协程x api有使用经验的童鞋ppps:有人说kt协程就是个线程切换框架(并且很多博客甚至也是这样写的?),但只能说ta并没有领悟到协程原创 2020-10-14 14:48:45 · 1410 阅读 · 0 评论 -
使用Retrofit时,对参数进行加密
前言从网上查了好多文章,不知道是不是版本问题,发现他们的都不管用,于是自己看了下源码,自己改了下源码import okhttp3.MediaTypeimport okhttp3.RequestBodyimport okhttp3.ResponseBodyimport retrofit2.Converterimport retrofit2.Retrofitimport java.lang.reflect.Type/** * creator: [email protected] *原创 2020-10-24 09:21:06 · 1182 阅读 · 0 评论 -
以回调形式使用startActivityForResult方法,并解决Activity被回收的问题
前言之前写过一篇文章写一个逻辑清晰的startActivityForResult(),拒绝来回扒拉代码,写了使用回调形式使用startActivityForResult方法,配合Kotlin的语法,可以很简单的处理startActivityForResult的返回数据和返回时机.ps:由于之前名字使用startActivityForResult会导致有时导错包,所以现在名字改成了jumpForResult问题(假设A页面启动B页面,下面简称A和B)但是也引出了一个问题,由于这个lam原创 2020-08-31 21:58:13 · 2467 阅读 · 2 评论 -
模仿Retrofit封装一个使用更简单的网络请求框架
前言想封装一套网络请求,不想直接上来就用别人写好的,或者说对项目可以更好的掌控,所以自己模仿着Retrofit来写一套.想要有如下实现:1.快捷的网络请求调用2.声明式的定义网络请求函数3.可以很灵活的变更网络请求的方式(http,https,socket等)4.可以使用自己的线程池或者协程进行线程调度调用网络请求和接收返回数据:使用this或者:使用匿名内...原创 2020-03-26 16:37:06 · 767 阅读 · 0 评论 -
手动实现kt(java)同步工作流和异步工作流
前言项目开发中可能会出现需要多个同步任务串行执行,或者多个异步任务都执行完毕再执行下一步的其实如果用kotlin的协程的话,可以很方便的完成,但如果不想用kt写或者引入协程库的话,就可以用下面两个工具类正文同步串行执行任务,使用链表结构import com.lt.androidkj.utils.mlistener.EmptyListenerimport com.lt.and...原创 2020-01-30 23:25:28 · 1190 阅读 · 2 评论 -
超级封装RecyclerView的适配器Adapter 只需二三十行代码
前言android开发中,RecyclerView是很常用的控件,而且功能也很强大,并且各种三方封装或者扩展库也是非常多,如:BaseQuickAdapter,XRecyclerview,当然还有我以前封装的LtRecyclerView比如BaseQuickAdapter虽然封装的非常方便,但那是相对于java语言,那用kotlin能不能使Adapter的封装更方便呢?答案是可以第一次...原创 2019-11-05 16:36:48 · 700 阅读 · 2 评论 -
Kotlin的基本数值类型问题:是对象?还是基本数据类型?
前言我们都知道Java中一直在说万物皆对象,面向对象编程,但基本数据类型却不是对象,而Kotlin中的所有类型都是对象,包括基本数值类型和方法,而数值对象的运行效率不如基本数据类型(具体请自行搜索);猜测那么,Kotlin中使用数值进行运算是否会比Java中使用数值运算效率更慢呢?理论在Java平台上,Kotlin的数字类型被物理存储为JVM原始类型,除非需要一个可空的...原创 2018-07-18 15:10:05 · 1281 阅读 · 3 评论 -
Java 调用 Kotlin
Kotlin 和 Java 的互操作性是 Kotlin 的一大优点,Kotlin 调用 Java 已经基本不需要特别去注意什么了,但是 Java 调用 Kotlin 代码就不那么好看了。项目切换到 Kotlin 的过程中总会有两种语言交错的时候,最近切换 Kotlin 的第一版就要上线了,就先总结一下已经遇到的 Java 调用 Kotlin 的特殊姿势。不一样的protectedKotli...转载 2018-07-12 18:12:29 · 5027 阅读 · 2 评论