首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kotlin--综合运用Hilt、Paging3、Flow、Room、Retrofit、Coil等实现MVVM架构

Jason老师的辛勤付出,动脑学院在B站上也有投稿koltin基础的视频,通过视频可以快速学习和上手kotlin 今天来综合使用各种组件,搭建最新MVVM项目框架,利用Paging3实现列表功能,Paging3...对象为Paging类型的,因为我们MovieDao返回的是一个PagingSource对象,所以需要把MovieEntity转换为MovieItemModel...3.Data Mapper Data Mapper广泛应用于MyBatis,Data Mapper将数据源的Model(MovieEntity)转换为页面显示Model(MovieItemModel)...,两者分开的原因就是为了Model层和View层进一步解耦 定义统一转换接口: interface Mapper { fun map(input: I): O } 针对MovieEntity...函数还没有调用 4.App Starup image.png App Starup是JetPack的新成员,提供了在App启动时初始化组件简单、高效的方法,还可以指定初始化顺序,我们新建一个类继承于Initializer

3.6K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Room & Kotlin 符号的处理

    认识 Kotlin 符号处理 随着注解处理器在 Android 上的广泛使用,KAPT 成为了编译时的性能瓶颈。...Room 工作原理简介 Room 的注解处理分为两个步骤。有一些 "Processor" 类,它们遍历用户的代码,验证并提取必要的信息到 "值对象" 中。...这些值对象被送到 "Writer" 类中,这些类将它们转换为代码。...为了支持 KSP,我们有三种选择: 复制 JavaAP 和 KSP 的每个 "Processor" 类,它们会有相同的值对象作为输出,我们可以将其输入到 Writer 中; 在 KSP/Java AP...遗憾的是,javax.lang.model API 在 Room 中的应用非常广泛。一次性创建所有这些 X 类,会给审阅者带来非常严重的心理负担。因此,我们需要找到一种方法来迭代这一实现。

    76430

    给 Java 开发者的 Kotlin 快速上手教程(Kotlin for Java Developers)v0.1

    Kotlin 概述: 开启 Kotlin 之旅 Google在2017年的IO大会上宣布,将Android开发的官方语言更换为Kotlin。...它几乎可以在今天使用Java的任何地方使用:用于服务器端开发,Android应用程序等等。 Kotlin与所有现有的Java框架100%兼容,并且具有良好的工具支持。...= null) { // null检查之后,这里自动类型转换为非空值 print(x * y) } } 类型检查和自动转换 is操作符用于检查某个对象是否是指定的类型...{ if (obj is String) { // `obj` 自动转换为 `String` return obj.length } // 在类型检查的if分支外 obj依然是 `...代码速查 创建Model Kotlin中称作数据类(Data Class) data class Customer(val name: String, val email: String) 会自动生成

    1.7K30

    Android快速转战Kotlin教程

    变量,其实这个变量也不是真正的static变量,而是一个伴生对象 伴生对象可以实现静态调用,通过类名.属性名或者类名.方法名进行调用 class RetrofitUtil { companion...,一般会将常量统一写到一个类里面,然后设置静态变量,由于在Kotlin中不存在静态变量,所有就有对象声明的存在,对象声明比较常用的地方就是在这里,对象声明用Objcet关键字表示。...NO.3 《疯狂Kotlin讲义》 ? 本书尤其适合从Java转Kotlin的读者,对于没有Java功底的读者,可忽略“对比”部分,直接学习本书也可掌握Kotlin编程。...第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。...在 Android 上开始使用 Kotlin https://developer.android.com/kotlin/get-started.html 一篇很牛叉的文章,向我们展示了如何使用 Kotlin

    2.8K22

    Kotlin Primer·第三章·Kotlin 与 Java 混编

    3.1.2 注意 Class 调用 在 Java 或 Android 开发中,经常会直接调用一个类的 Class 文件。...3.1.3 Android proguard 的坑 注:我们团队遇到过这样的一个坑,在 Android 开发的时候,如下代码会在混淆以后,发生异常 var str = some?s?.d ?...: String() 猜想应该是 proguard 不知道如何处理这段代码,无法识别出最后两个引号是一个String,最后直接将整个函数移除掉了。...与上面的类似,Java 在调用时,可以这样写:StringUtils.Companion. isEmpty(); 关于伴生对象,我们将在下一章 类与对象 详细讲解。...为了兼容 Java,Kotlin 默认会将所有的包级别函数放在一个自动生成的叫ExampleKt的类中, 在 Java 中想要调用包级别函数时,需要通过这个类来调用。

    1.5K20

    Better Kotlin

    这是 Kotlin 在 Android 开发中的很牛逼的一大特性,想必不少小伙伴都被此 Android 的 NullPointException 困扰许久。我们直接转换 Java 文件造成的各种 !!...大家也要尽量的避免这种情况。 3 应该好好注意一下伴生对象 伴生对象通过在类中使用 companion object 来创建,用来替代静态成员,类似于 Java 中的静态内部类。...但将这段简洁的 Kotlin 代码转换为等同的 Java 代码后,却显的晦涩难懂。...访问一个伴生对象的私有常量字段需要经过以下方法: 调用伴生对象的静态方法 调用伴生对象的实例方法 调用主类的静态方法 读取主类中的静态字段 为了访问一个常量,而多花费调用4个方法的开销,这样的 Kotlin...对于其他类型的常量,最好在它们自己的主类对象而不是伴生对象中来存储公共的全局常量。

    1.3K20

    Kotlin学习日志(二)数据类型

    :变量类型”的格式声明,不同于Java中常见的“变量类型:变量名”这种格式,(PS:这个在刚开始接触Kotlin的时候很容易搞混,用久了就可以了),后面是没有分号的,Java则有,在Kotlin中如果你后面还有其他语句的话则要加上分号...的数据类型转换函数 转换函数说明 toInt 转换为整型 toLong 转换为长整型 toFloat 转换为浮点数 toDouble 转换为双精度数 toChar 转换为字符 toString 转换为字符串...Kotlin中不存在名为StringArray的数组类型,因为String是一种特殊的基本数据类型,要想在Kotlin中声明字符串数组,得使用ArrayString>类型,同时,分配字符串数组的方法也变成了...四、容器 与Java类似,Kotlin也拥有三类基本的容器,分别是集合Set、队列List、映射Map,然后每类容器又分作只读与可变两种类型,这是为了判断该容器能否进行增、删、改等变更操作,Kotlin...另外,Kotlin允许在声明容器变量是就进行初始赋值,这一点在Java中是不行的,当然,不同容器的初始化方法有所不同,如下表所示 kotlin的容器 容器名称 容器的初始化方法 只读集合 Set setOf

    3.4K20

    Kotlin快速上手

    在以下示例中,languageName 推断为 String,因此您无法对其调用任何不属于 String 类的函数: val languageName = "Kotlin" val upperCaseName...不过,inc() 是一个 Int 运算符函数,因此无法对 String 调用它。利用 Kotlin 的类型推断,您既能确保代码简洁,又能确保类型安全。...Kotlin 非常智能,能够明白执行分支的条件是 languageName 不持有 null 值,因此您不必在该分支中将 languageName 视为可为 null。...: stringMapper("Android") { input -> input.length } 您可以在整个 Kotlin 标准库中找到匿名函数。...类函数和封装 类使用函数对行为建模。函数可以修改状态,从而帮助您只公开希望公开的数据。这种访问控制机制属于一个更大的面向对象的概念(称为“封装”)。

    1.2K10

    DataBinding最全使用说明

    业务逻辑应该尽量在Model中 ViewModel属于DataBinding自动生成的类 MVP对比MVVM的劣势 MVP通过接口回调实现导致代码可读性差, 阅读顺序不连贯 MVP无法实现双向数据绑定...注意不能使用字符串android, 否则会报错无法绑定. class 标签有个属性可以自定义DataBinding生成的类名以及路径 <!...// 存储到数据 } } }; 所以如果你没用重写Inverse的数据变更方法将无法让视图通知数据刷新. // 该方***在绑定布局的时候回调 @Override protected...对象 即直接将对象作为和属性等同的方式在XML使用. 这就必须先手动创建一个对象. 稍显麻烦....空对象的字段也会有默认值(String的默认值是NULL, TextView就会显示NULL); 并且如果你用了三元表达式, 空对象的三元表达式都为false; 所以建议不要考虑空对象的情况; 如果你给一个要求值是布尔类型值的自定义属性

    2.2K20

    【Jetpack】DataBinding 架构组件 ( 数据绑定技术简介 | Android 中的 DataBinding 数据绑定 | 启动数据绑定 | 定义数据类 | 布局文件转换 )

    Model 与 用户界面 View 进行绑定 ; 用户界面 修改 数据时 , 会自动更新到 数据模型 中 ; 数据模型 中的数据 改变时 , 用户界面 中 的数据会自动更新 ; 数据绑定 可以 使代码...已开启的信息设置到应用中 ; 2、定义数据类 定义 普通的 Kotlin 数据类型 , 其中封装了 var name: String 和 var age: Int 两个变量 ; package kim.hsl.databinding_demo...} 获取该数据类型对象的成员 , 并设置到布局组件中 ; <TextView android:id="@+id/textView2" android...int 类型 , 如 student.age , 设置到 android:text 属性时 , 需要将其转换为 String 类型 ; 完整代码示例 : 对象的 name 和 age 字段值 ;

    1.6K20

    前端写一个月的原生 Android 是怎样一种体验?

    这一个月下来,也算是有一些写 XML 的心得吧——不对,写 Java 代码,看 Kotlin 代码的心得。总的来说,Android 与前端的差异并不是非常大,在某些东西上,他们还是蛮相似的。...只是考虑到,Java 代码的臃肿,还是改用 Kotlin 吧。 ? Android Studio 转 Kotlin 只需要按下: Command + Alt + Shift + K,轻松当爸爸。...简单来说,就是你需要手动地创建四五个类,才能完成一个 Activity 的 Hello, world。 Model 与此同时,Android 默认是要对 Model 进行校验和转换的。...因为取出 JSON 中的某个值,需要将 JSON 转换为对象——可以直接使用 Retrofit 库来转换数据,又或者用 GJSON 转换成某种对象。...静态语言 要知道 WebStorm 或者 Intellj IDEA 专业版,它们在 JavaScript 第三方类的支持上就是坑。

    1.9K100

    【Jetpack】DataBinding 架构组件 ⑤ ( 数据模型与视图双向绑定 | BaseObservable 实现双向绑定 | ObservableField 实现双向绑定 )

    一、数据模型 Model 与视图 View 双向绑定 ---- 1、数据模型 Model 与视图 View 的单向绑定 在之前的博客中 , 将 数据模型 Model 中的 指定 Field 字段 绑定到...View 视图中的组件 , 在实际案例中 , 将 Student 类中的 String 类型的 name 字段绑定到了 布局文件中的 TextView 组件中 , 当 Student#name 字段发生了改变...插件 凡是 在 Kotlin 中使用到注解的情况下 , 都需要导入 kotlin-kapt 插件 ; 在 Module 下的 build.gradle 构建脚本中 , 导入 kotlin-kapt 插件..., 需要继承 BaseObservable 类 ; class StudentViewModel: BaseObservable { } 在该类中 , 需要 维护一个 数据类对象 , 如下在 次构造函数...Student 对象的 name 属性 ; fun getStudentName(): String?

    1.4K30

    一个实例学习Kotlin 开发 Android App 的全过程(内有代码)

    自 Google I/O 大会,Google 正式宣布 Kotlin 成为 Android 开发的官方语言的五个月以来,不少开发团队都开始使用 Kotlin 对 Android 应用进行重写。...例如,地区列表是从服务端获取的JSON数据,因此,需要有相应的类来完成从网络上获取数据的工作,而且获取的是JSON格式的数据。因此,在使用这些数据之前,需要先将其转换为Kotlin类。...Kotlin代码(数据类) // 描述省信息的数据类 data class Province(var id:Int = 0, var provinceName:String, var proinceCode...对象中有4个方法,其中前3个方法用于分析省、市和县区级JSON格式数据,并将这些数据转换为相应的对象。...第4个方法用于分析描述天气信息的JSON数据,而且未使用Android SDK标准的API进行分析,而是使用了gson开源库对JSON数据进行分析,并返回一个Weather对象,Weather类与其他相关类的定义需要符合

    5.3K50

    KMM 求生日记二:KotlinNative 被踩中的坑

    Java 所有类的根级父类是 Object,但是在 Kotlin/JVM 中,这两者是统一的,也就是说如果一段 Java 代码接收的参数类型是 Object,那我们仍然可以将任意一个 Kotlin 对象作为参数传入...上述差异导致的最严重问题就是 Kotlin/Native 类在 Kotlin 工程中拿不到 class 对象。在 Java 中所有类都有类型为 Class 的 class 对象,通过类名或该类的对象都可以直接获取。在 Kotlin/JVM 中,Kotlin 有自己的 KClass 类型,它与 Java 的 ClassKotlin/Native 中,KClass 无法获取一个类的 Objective-C 的 class 对象,这最直接的结果就是许多现有的 Objectice-C 库,可能含有需要传入一个 class...但奇怪的是,在 Kotlin 工程中如果直接声明一个类继承自 NSObject,可以用 class() 函数来获取自身的 class 对象,但普通的 Kotlin 类则没有这个函数。

    2.7K10

    kotlin如何使用MVVM的开发模式

    Android本身的开发模式为MVC,前些年MVP大行其道,这两年MVVM逐渐开始流行,最近准备用kotlin开发一个项目,顺便了解一下MVVM。...我采用的Android studio版本如下,因为大家会在软件版本上出问题,所以特意给大家贴出来我的版本 ? 首先、建立一个新的Android工程,开发语言选择kotlin,如下图所示 ?...其次、修改工程下的 C:\kotlin\live\app\build.gradle apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply...的支持 apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'apply plugin: 'kotlin-kapt...的写法,然后编译一下导入包 视图的名称转换为每个单词的首字母大写+Binding,例如activity_main.xml=>ActivityMainBinding 视图activity_main.xml

    2.3K10

    【Jetpack】ViewModel + LiveData + DataBinding 综合使用 ( 核心要点说明 | 组合方式 | 代码示例 )

    DataBinding 结合使用时 , 在 DataBinding 布局中设置的就是该 视图模型 类对象 ; 该 ViewModel 类中 , 还 使用了 LiveData , 可以实时监听数据改变..., 可以将 运行过程中 ViewModel 中的 Model 模型数据改变 通知 视图 View , 令视图组件显示最新的数据内容 ; 在 ViewModel 中使用了 LiveData 后 , 必须调用...数据模型对象 或者 ViewModel 视图模型对象 , 在本示例中配置的是 ViewModel 实例对象 ; 配置 Model 数据模型对象 , 那么就是 DataBinding 简单使用 ;...id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'kotlin-kapt' } android {...实例对象 , 先获取 ViewModel 实例 , 然后设置给 DataBinding 布局 ; 设置 LiveData 观察者 , 在 ViewDataBinding 类中 , 可以直接调用 调用的

    1.6K20
    领券