背景 RxCache 是一个支持 Java 和 Android 的 Local Cache 。 之前的文章给 Java 和 Android 构建一个简单的响应式Local Cache曾详细介绍过它。...; T result = null; if (expireTime从不过期 String json = entity.data...Room 提供 SQLite 语句的编译时检查,可以返回 RxJava 和 LiveData Observable。...; import androidx.room.Query; import static androidx.room.OnConflictStrategy.IGNORE; /** * @FileName...; T result = null; if (expireTime从不过期 String json = entity.data
"android.arch.persistence.room:compiler:1.1.1"的写法需换成kapt "android.arch.persistence.room:compiler:1.1.1...package com.xxx.xx.room.entity import android.arch.persistence.room.Entity import android.arch.persistence.room.PrimaryKey...= null } 第二步,在dao包里写对应的dao,对应的操作, 注意这些操作接口最好都带个返回值,比如insert返回long,delete返回Int。因为最终的使用总要对操作结果来个判断吧。...import android.arch.persistence.db.SupportSQLiteDatabase import android.arch.persistence.room.Room...import android.arch.persistence.room.RoomDatabase import android.arch.persistence.room.migration.Migration
需要满足:定义的类是一个继承RoomDatabase的抽象类,注解中定义包含实体类列表,包含一个没有参数的抽象方法并返回Dao对象 一、Room上手 首先添加依赖: implementation...; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update...内部会调用构造方法 定义获取Dao对象的抽象函数 package com.aruba.room; import android.content.Context; import androidx.room.Database...二、ViewModel+LiveData+Room Room支持返回LiveData类型,结合ViewModel、DataBinding,就可以改造成一个非常棒的MVVM架构 package com.aruba.room...androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; import java.util.List
' compile 'android.arch.lifecycle:runtime:1.0.0-alpha5' compile 'android.arch.persistence.room...:compiler:1.0.0-alpha5' annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha5..." //数据库迁移的时候使用 compile "android.arch.persistence.room:testing:1.0.0-alpha5" 在项目的build.gradle...,你可以在查询中返回Cursor对象 @Query("SELECT * FROM " + Student.TABLE_NAME + " WHERE " + Student.COLUMN_ID...toTimestamp(Date date) { return date == null ?
runtime:$room_version" 4 annotationProcessor "android.arch.persistence.room:compiler:$room_version..."android.arch.persistence.room:testing:$room_version" 11} Room 上面的依赖添加完成后,接下来我们可以正式使用Room。...null) { 8 instance = Room.databaseBuilder(context.applicationContext, 9 ...返回我们所需的数据。 在第二行代码,细心的你们可能会发现它返回了LiveData类型数据。...它是ACC的另一强大组件,这也是Room的另一强大之处,它可以直接返回LiveData数据类型,完美与LiveData结合。
这是一篇自己从Android开发文档中翻译来的关于Room 的文档。...关于 @Insert 的详细介绍查看文档 https://developer.android.com/reference/android/arch/persistence/room/Insert.html...Room 也会验证方法的返回值,如果返回对象中的字段名称和查询响应中的字段名字不匹配, Room 会通过以下方式给出提示 如果只有一些字段名称不匹配,会发出警告 如果没有字段名称匹配,会发出错误。...要使用此功能,需要将 Room 组中的 android.arch.persistence.room:rxjava2 组件添加到构建Gradle依赖项中,添加组件之后就可以返回 Rxjava2 中的对象...return date == null ?
{ id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' } def room_version...import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import...@Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(userInfo: UserInfo) //返回...Flow,由于Flow需要使用collect,该函数为挂起函数,所以不需要加suspend了 @Query("SELECT * FROM userinfo") fun getUserInfoList...|| name.value == null || age.value == null) { return } val userInfo = UserInfo
一、Room + ViewModel + LiveData 框架使用核心要点 1、Room 框架优化分析 在上一篇博客 【Jetpack】使用 Room 框架访问 Android 平台 SQLite 数据库..., 唯一的区别是 Room 框架中的 Dao 数据访问接口对象 中的 查询方法 , 其返回值类型改为 LiveData 类型 , LiveData 的泛型为 原来的查询方法的返回值类型 ; Dao 查询方法的返回值由...where id = :id") fun query(id: Int): List Room 框架的用法 , 参考 【Jetpack】使用 Room 框架访问 Android...>> 类型 返回值 ; 手动主动调用的查询 数据库的 方法接口 , 返回 List 类型 返回值 ; /** * 查询数据库表 */ @Query(...:room-compiler:2.2.5' 完整代码 : plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android
; import android.os.Bundle; import android.os.Handler; import android.text.Editable; import android.text.InputType...; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup...数据库和刷新控件: implementation 'androidx.room:room-runtime:2.3.0-rc01' annotationProcessor 'androidx.room...; import androidx.room.Insert; import androidx.room.Query; import com.aruba.paging4.entity.Movie; import...; import androidx.room.InvalidationTracker; import androidx.room.Room; import androidx.room.RoomDatabase
使用@Database注释的类应满足以下条件: 继承了 RoomDatabase 的抽象类 在注解中包含与数据库相关联的实体类列表 包含一个无参抽象方法,并返回使用 @Dao 注释的类。...=true android.useAndroidX=true 3、创建 Entity、DAO、Database Entity 在 Room 中,每个被 @Entity 标注的 data class 都被视为...为我们提供了四种注解:@Insert 、@Delete 、@Update、@Query ,其中只有 Query 的参数是 SQL 语句,它支持 SELECT、INSERT、UPDATE 、DELETE...://codelabs.developers.google.com/codelabs/android-room-with-a-view-kotlin https://developer.android.com.../reference/android/arch/persistence/room/OnConflictStrategy
包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。...,只有@Query的方法后面要改查询语句,并且返回类型也是自己改的。...= null fun getDatabase(context: Context): AppDataBase { if (INSTANCE == null) {...androidx.room.Entityimport androidx.room.Query @Entity(tableName = "Body", primaryKeys = ["Code", "...*import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() {
Room 是 SQLite 的封装,它使 Android 对数据库的操作变得非常简单,也是迄今为止我最喜欢的 Jetpack 库。...Room https://developer.android.google.cn/training/data-storage/room Room with a view codelab https://...developer.android.google.cn/codelabs/android-room-with-a-view-kotlin#0 定义数据库表 在我们的数据库中仅有一个表,就是保存词汇的表。...我们希望当数据库中的数据发生改变的时候,能够得到相应的通知,所以我们返回一个 Flow>。由于返回类型是 Flow,Room 会在后台线程中执行数据请求。...://developer.android.google.cn/codelabs/android-room-with-a-view-kotlin#0 ----
Room是一种ORM(对象关系映射)框架,可以用OOP(面向对象)的思路开发数据库,有点像早期的greenDAO,不过Room作为Jetpack的一员,能够返回更多类型的数据,比如能直接返回DataSource.Factory...Jetpack笔记代码 本文源码基于SDK 29 使用 引入依赖: def room_version = "2.2.3" implementation "androidx.room:room-runtime...:$room_version" //注解处理器,用于编译期根据注解来生成类 annotationProcessor "androidx.room:room-compiler:$room_version"...= null) { return _userDao; } else { synchronized(this) { if(_userDao == null)...参考文章 简书-Android Room 框架学习
包含一个具有0个参数的抽象方法,并返回用@Dao注释的类。...:runtime:1.1.1' implementation 'android.arch.persistence.room:rxjava2:1.1.1' kapt 'android.arch.persistence.room...import android.arch.persistence.room.OnConflictStrategy import android.arch.persistence.room.Query import...import android.arch.persistence.room.Room import android.arch.persistence.room.RoomDatabase import android.content.Context...= null fun getInstance(context: Context): AppDatabase = INSTANCE ?
包含具有 0 个参数且返回使用@Dao注释的类的抽象方法。...FROM t_history") fun deleteAll() } @Insert:增 @Delete:删 @Update:改 @Query:查 这里有一个点需要注意的,就是查询所有搜索历史返回的集合我用...Room 不知道表中有更新的数据是哪一个,因此它会重新触发 DAO 中定义的 query 操作。...room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。 android { ......最佳实践 | 基于 Android 开发者峰会应用
因为Room有下面几个优点: ① SQL查询在编译时就会验证 - 在编译时检查每个@Query和@Entity等,这就意味着没有任何运行时错误的风险可能会导致应用程序崩溃(并且它不仅检查语法问题,还会检查是否有该表...1、在app/build.gradle中添加以下依赖 implementation 'android.arch.persistence.room:runtime:1.0.0' annotationProcessor...'android.arch.persistence.room:compiler:1.0.0' 你可以点击这里查看最新依赖版本号 2、创建JavaBean @Entity public class User...也可以返回多种不同的类型。...instance; static synchronized UserDatabase getInstance(Context context) { if (instance == null
= "2.3.0" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room...:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" implementation...) suspend fun insert(movieList: List) @Query("SELECT * FROM MovieEntity") fun...getMovieList(): PagingSource @Query("DELETE FROM MovieEntity") suspend fun...= null) (holder.binding as ItemBinding).movie = getItem(position) } } 4.为RecyclerView
:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" 这里有两个库一个是依赖库,一个是注解处理器库..." /> <Button android:id="@+id/btn_query" android:layout_width="match_parent"...android:layout_height="wrap_content" android:text="Query" /> { User user = db.userDao().findByName("张三"); if (user == null...runOnUiThread(() -> { User user = db.userDao().findByName("李四"); if (user == null
---- 谷歌为了帮助开发者解决 Android 架构设计问题,在 Google I/O 2017 发布一套帮助开发者解决 Android 架构设计的方案:Android Architecture Components...表的搭建 Room 作为一个 Android 数据库操作的注解集合,最基本操作就是对我们数据库进行的。...顾名思义被该注解标注的方法,会被 Room 的注解处理器识别,当作一个数据查询方法,至于具体的查询逻辑并不需要我们关心,我们只需要将 SQL 语句 作为参数,传入 @Query(...) 中即可。...(INSTANCE == null){ INSTANCE = Room.databaseBuilder(context.getApplicationContext...== null){ INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
领取专属 10元无门槛券
手把手带您无忧上云