大家好,又见面了,我是你们的朋友全栈君。 1....前言 在调试Android原生Setting开始中,遇到DialogPreference中用遥控器操作SeekBar到100%时,再按一次右键SeekBar焦点会跳至确定按钮中去。...event, false otherwise. */ boolean onKey(View v, int keyCode, KeyEvent event); } 4. onKey返回值说明...由上面的代码可见,对按键监听时,onKey的返回值不同,代表对按键的不同处理方式。...false: 抛给系统处理 (将事件放行,焦点会移动) true: 用户自己处理 (将事件拦截,焦点不会移动) 因此,当满足条件时,让onKey的返回值为true即可将键值拦截下来由用户自己处理,系统便不再响应这个按键
文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 中调用挂起函数返回多个返回值 四、协程中调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...在 Kotlin 协程 Coroutine 中 , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 协程】协程的挂起和恢复 ① ( 协程的挂起和恢复概念...// 调用 " 返回 List 集合的函数 " , 并遍历返回值 listFunction().forEach { // 遍历打印集合中的内容...],一个接一个地懒惰地产生值。...---- 如果要 以异步方式 返回多个返回值 , 可以在协程中调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package
在DWR中实现直接获取一个JAVA类的返回值 DWR是Ajax的一个开源框架,可以很方便是实现调用远程Java类。但是,DWR只能采用回调函数的方法,在回调函数中获取返回值,然后进行处理。...那么,到底有没有办法直接获取一个方法的放回值呢?...,然后在回调函数中处理,上面那段话执行后会显示test,也就是java方法的返回值。...但是,采用回家函数不符合我们的习惯,有些时候我们就想直接获取返回值进行处理,这时候就无能为力了。 我们知道,DWR是Ajax的框架,那么必然拥有了Ajax的特性了。...现在,让我们打开DWR的engine.js文件,搜索一个asyn,马上,就发现了一个setAsync方法,原来,DWR是这个方法设置成属性封装起来了。这样,我们就可以实现获取返回值的功能了。
我自己写的玩具路由组件 更合理的多仓库编译插件 协程和响应式 我想先说下响应式编程,我个人理解就是一个输入值会有一个有效的输出。...而协程则是通过其中的挂起函数,即把回调函数通过挂起和恢复的机制,变成一个有返回值的方法,当我调用这个方法的时候,没有返回值的情况下,程序就是处于一个开发不需要关心的挂起状态,而有返回值之后,我们就可以继续向下变成了...然后由这个Fragment发起页面跳转逻辑,同时接受页面跳转的返回值以及回调参数,然后通过Callback的方式来通知路由当前的转跳结果。...下面会从几个小问题分别来对其进行分析。 发布jcenter的aar怪怪的 不知道各位开发同学在实际项目编写中碰到一些烦恼。以我玩具路由组件项目为例。下图是我的Project的样子。...小升级 路由中的含有一个Plugin,主要就是负责把收集每个Jar包或者源码中的类,然后通过asm插装的方式,动态的往一个注册类内去注册,我之前的文章也介绍过这方面的。
目标 简单调用、少写重复代码 不依赖第三方库(只含Retrofit+Okhttp+协程) 完全不懂协程也能立马上手(模板代码) 用Kotlin的方式写Kotlin代码,什么意思呢?...obserState()方法第二个参数中传入了UI引用。 不能达到"看方法如其意",如果是刚接触,会有很多疑问:为什么需要一个livedata作为方法的参数。网络请求的返回值去哪了?...如果想加一个从数据库或者缓存中获取数据,封装一想改都不好改,如果强制改就破坏了封装,侵入性很大。 针对封装一的不足,优化出了封装二。...Repository中的方法都有返回值,会返回结果,也不需要用livedata作为方法参数。 LiveData只存在于ViewModel中,LiveData不会贯穿整个请求链。...Repository中也不需要LiveData的引用,Repository的代码就是单纯的获取数据。 针对多数据源,也非常好处理。 跟ui没任何关系,可以完全作为一个独立的Lib使用。
今天我要跟大家分享一个有关 Java 编程的有趣现象,就是在 `finally` 块中无法改变返回值。别担心,我会以轻松的方式来解释这个问题,并给出具体的字节码指令分析,让大家一起开心地学习!...但是,有一点需要注意:`finally` 块中的任何改变都不会影响 `try` 或 `catch` 块中的返回值。 那么问题来了,为什么 `finally` 块中无法改变返回值呢?...value 3: iload_0 // 从本地变量 value 中加载值到操作数栈上 4: ireturn // 返回操作数栈上的值 5:...`finally` 块中的新值赋给了本地变量 `value`,但这对于返回值并没有任何影响。...所以,即使 `finally` 块中的代码改变了 `value` 的值,也不会影响方法的返回值~
kotlin dsl的简单学习 AGP升级4.1.1的陨石坑 yaml 还真香 正文 kotlin dsl的简单学习 DSL(domain specific language),即领域专用语言:专门解决某一特定问题的计算机语言...Request,可以看得出来,这部分构造参数其实也还是蛮恶心的,虽然我都加了默认值,但是给人的第一感觉就是这个人不够风骚呀。...Request,然后我们可以在这个闭包内,定义添加bundle以及跳转时候的参数,我们可以定义一个成功或者失败的回调函数,同时定义好是不是一个有返回结果的请求。...Tips 这里同时使用了@DslMaker的属性,就是禁止在闭包内套娃的一个合理操作 项目学习地址 Router-Android AGP升级4.1.1的陨石坑 最近项目在偷偷的做一些关于AGP...之后在文件生成或者pleaceholder的生成过程中,就无法插入你所需要的代码了。
Anko Anko 是一个 DSL (Domain-Specific Language), 它是JetBrains出品的,用 Kotlin 开发的安卓框架。...先来看一个直观的例子 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height...简单封装OkHttp OkHttp是一个成熟且强大的网络库,在Android源码中已经使用OkHttp替代原先的HttpURLConnection。...如果使用Kotlin来开发项目的话,完全可以尝试一下。 公司的sdk项目我也考虑引入Kotlin,我已经写了一个module用于封装原先的sdk,这个module只适用于Kotlin项目。...另外,众所周知的Gradle也是基于DSL的Java构建工具。 参考资料: > Type-Safe Builders
背景 XTask是我基于RxJava的设计思想,并结合实际项目中使用的经验所创造出来的一个开源项目,其目的就是要代替RxJava在Android中的部分使用场景,提升开发的体验和可维护性。...简介 XTask XTask是一个拓展性极强的Android任务执行框架。通过它,你可以自由定义和组合任务来实现你想要的功能,尤其适用于处理复杂的业务流程,可灵活添加前置任务或者调整执行顺序。...,XTask是把所有的业务处理器都封装在了一个一个的Task中,然后按任务的执行顺序依次添加对应的Task即可完成。...Task中,然后并行的任务需要通过一个ConcurrentGroupTask(同步组任务)进行包裹,其他按正常执行顺序添加Task即可。...总结: 如果从编程的简洁性角度而言,无疑Kotlin Coroutine是完胜的,毕竟这是函数式编程的优势。但是如果从编程的耦合性角度而言,那XTask还是有点优势的。
Raw types are not supported" } //取出Await中的T 也就是API返回数据对应的数据类型 // val dataType = getParameterUpperBound...的放入await中。...在这个实体类中包含了okHttp的call。...= null) { //如果返回值值列表封装类,且是第一页并且空数据 那么给空异常 让界面显示空 if (listData.isRefresh() &&...= null) { //如果返回值值列表封装类,且是第一页并且空数据 那么给空异常 让界面显示空 if (listData.isRefresh() &&
前言 Android 官方已经推荐使用Kotlin 足以见Kotlin的优秀 并且可以在原项目中直接用Kotlin 完全没有什么可担心的 代码比Swift还好用 强烈推荐 推荐 kotlin...plugin: 'kotlin-android-extensions' 直接用视图定义的ID即可 超级方便 <EditText android:id="@+id/loginNameEditText...直接用loginNameEditText就行了 Set/List/Map 首先要说的是没有new了 集合的分类: Set(集) List(列表) Map(映射) 在Kotlin中,明确的区分了只读和可变的集合...`this` 持有的值是 `l` 扩展是被静态解析的 类对比 Java Intent t = new Intent(); t.setClass(this,LoginActivity.class);...private:同一类或文件(针对包级别定义)中可见 protected:同private 加子类可见 internal:在同一个模块中可见(如果声明范围的所有者是可见的) public:公共,所有都可见
对于函数式编程,没有本地的支持:在Java中,有Stream API (再说一次,它只支持从API 24开始的Android),但是它在语言中的集成类似于Optional;它不存在于与原始类型相关联的对象中...Kotlin还提供了安全打开那些optionals listener ?.onSuccess() 的可能性,而无需检查optional有没有值,并且还提供了Elvis Operator。...T类型的输入参数,并返回一个对象类型的R。...另外,Kotlin的编译器强制控制可能具有空值的类型,甚至在与Java代码兼容的情况下引入运行时检查。...Binding of views:这是一个具体的Android问题,Jetbrains为我们提供了Kotlin Android扩展;一个官方的支持库通过一个gradle的插件来简化这个问题(以及其他一些问题
它的设计初衷就是为了解决并发问题,可以更方便地处理多线程协作的任务。 在 Kotlin 中,协程就是一个封装好的线程框架。...类比于 Java 中的 Executor 或 Android 中的 AsyncTask。...handleException(context, it) } } }) 首先,被 suspend 包裹的代码段就是协程需要去执行的协程体,最后还有一个返回值。...确实可以给协程绑定一个名字,而且在协程体中可通过 coroutineContext 协程上下文对象获取到协程上下文的一些信息;协程执行完成时,回调的是 resumeWith 中 Result 的 onSuccess...水滴技术团队 Android 上的 Kotlin 协程 官方文档 https://developer.android.google.cn/kotlin/coroutines#groovy Kotlin
Groovy语法 要理解build.gradle文件中的这些DSL是如何被解析执行的,需要介绍Groovy的一些语法特点以及一些高级特性,下面从几个方面来介绍Groovy的一些特点。...a函数的形参调用,然后将d作为形参再次调用返回的实例(Instance)中的c方法。...,则最后一个参数会被当成属性值(Property)访问。...Kotlin和anko进行Android开发 anko Anko 是一个 DSL (Domain-Specific Language), 它是JetBrains出品的,用 Kotlin 开发的安卓框架。...OkHttp封装 OkHttp是一个成熟且强大的网络库,在Android源码中已经使用OkHttp替代原先的HttpURLConnection。
谷歌接管Dagger后,推出了自己的Hilt框架,Hilt基于Dagger做了一层封装,大大简化了Dagger的使用,定制了一系列规范,并支持Jetpack中部分组件,是一个专门为安卓开发的DI框架 一...、构造函数注入 和Dagger相同,Hilt也分两种注入方式,以上篇Dagger中的代码为例子,来对比两个框架的使用区别 1.gradle中配置依赖 工程gradle中导入插件: dependencies...com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'dagger.hilt.android.plugin...,对应的作用域为ViewModelScope,作用为:一个ViewModel中多个同类型注入对象,则使用同一份实例。...@Qualifier注解解决注入冲突 对于构造函数注入,只能有一个构造函数被@Inject注解,否则编译时报错 对于模块注入,如果多个@Provides注解的方法返回相同类型,使用@Qualifier注解可以解决冲突
前言 这里写了两种方式请求接口 (文中用了Java和Kotlin两种语言 没有特殊标示的都是Java) 普通方式 Rx方式 建议是用Rx方式 常用调用方式 依赖 名称 引用方式 作用 okhttp-OkGo..."";// 返回提示信息 private T obj;// 返回对象或者对象列表 public ResultVo() { } public ResultVo(int code, String...; import android.app.ProgressDialog; import android.content.Context; import android.view.Window; import...* 主要作用是解析网络返回的 response 对象,生产onSuccess回调中需要的数据对象 * 这里的解析工作不同的业务逻辑基本都不一样,所以需要自己实现,以下给出的时模板代码...(请忽略onCreate中的方法 只是用来去掉状态栏的背景) Kotlin open class SBaseActivity : AppCompatActivity() { var compositeDisposable
} }); 2、在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)。...适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上 6、...整体作用功能和run函数很像,唯一不同点就是它返回的值是对象本身,而run函数是一个闭包形式返回,返回的是最后一行的值。...,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个Unit类型的默认值。...闭包形式返回 否 适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到
Android 单元测试(kotlin 代码)。...编写第一个 Android 单元测试 SETUP Android 单元测试主要使用是 JUnit 测试框架 + Mockito Mock 类库 + Mockito-kotlin 的扩展库,需要在...Android 框架,运行太慢,二 Repo 可能依赖了网络或者数据库或者文件,不够稳定),就可以使用 mock() 方法来创建一个模拟的类(这里 mock() 是一个泛型方法,使用了 kotlin...{} 方法体中,我们拿到了回调的对象,并执行了 onSuccess() 回调,将我们构造的搜索结果返回回去(这个过程就叫做 Stubbing,翻译过来就是插桩)。...这里验证的时候使用了 JUnit 库中的 assertThat() 方法,这个方法接收两个参数 ,第一个参数是验证的目标,第二个参数是一个 Matcher,因为 kotlin 中 is 是保留关键字,所以需要用
前言 之前写了一篇为什么智能硬件首选MQTT - 掘金,这次就来搭建一个自己的MQTT交互平台,实际体验一下,没有实战怎么能行。 一、服务端准备 1....选择平台 我这里用的平台是EMQX Cloud,可以通过github账号免费申请一个MQTT服务器,对于个人使用来说特别方便,同时使用使用 MQTT 客户端快速测试 MQTT 服务去监听或者模拟下发,这里我们选择免费开启...启动服务 建立好以后我们点击项目管理,里面就会出现一个我们刚申请的服务器,进去后点击启动,这样我们就把服务启动起来了。 3....options.setKeepAliveInterval(180); //心跳间隔时间 options.setMaxInflight(100); //最大请求数,默认10,高流量场景可以增大该值...代码,我是用Java写的,Kotlin版的建议参考Android 使用 Kotlin 连接 MQTT,代码基本就在这里了,项目啥的就不放了。
一、回调函数的Kotin的lambda的简化 在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lambda函数来代替。可以简化写一些不必要的嵌套回调方法。.../todo } }); 2、在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)。...适用于调用同一个类的多个方法时,可以省去类名重复,直接调用类的方法即可,经常用于Android中RecyclerView中onBinderViewHolder中,数据model的属性映射到UI上 6...整体作用功能和run函数很像,唯一不同点就是它返回的值是对象本身,而run函数是一个闭包形式返回,返回的是最后一行的值。...); return this } 3、also函数的inline结构分析 also函数的结构实际上和let很像唯一的区别就是返回值的不一样,let是以闭包的形式返回,返回函数体内最后一行的值,如果最后一行为空就返回一个
领取专属 10元无门槛券
手把手带您无忧上云