android room 教程,android room 使用
引入依赖
def room_version = "2.2.5"
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version"
在android 配置中加入
apply plugin: 'kotlin-kapt' //kapt
android{
...
defaultConfig{
...//指定room.schemaLocation生成的文件路径
javaCompileOptions {
annotationProcessorOptions {
arguments= ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
}
...
}
定义相应的实体类
@Entity(tableName = "t_user")classUser {
@PrimaryKey
@NonNull
var id: String= ""var username: String? = nullvar name: String? = nullvar sex: Int? = nullvar pic: String? = nullvar area: String? = nullvar phone: String? = nullvar address: String? = nullvar disabled: Boolean? = nullvar delFlag: Boolean? = null}
字符串主键 一定要添加 @NonNull 注解
下面就是dao了
@DaointerfaceUserDao {
@Query("select * from t_user where id=:id limit 1")
fun get(id:String): User?@Query("select * from t_user where delFlag = false")
fun query():List
//插入或更新
@Insert(onConflict =OnConflictStrategy.REPLACE)
fun insertOrUpdate(user: User)
@Query("delete from t_user where id=:id")
fun delete(id: String)
}
然后就是database类
@Database(entities = [User::class, 其他定义的数据类...],version = 1,exportSchema = true)
@TypeConverters(DateConverter::class, BoolConverter::class)abstract classAppDatabase : RoomDatabase() {abstractfun userDao(): UserDao
...
}
@TypeConverters 这里使用了两个自定义的转换器 处理
1.数字转boolean
classBoolConverter {
@TypeConverter
fun revertDate(value: Number): Boolean {return value == 1}
@TypeConverter
fun converterDate(value: Boolean): Number {return if(value) 1 else 0}
}
2.毫秒数转日期
classDateConverter {
@TypeConverter
fun revertDate(value: Long): Date {returnDate(value)
}
@TypeConverter
fun converterDate(value: Date): Long {returnvalue.time
}
}
然后定义一个database帮助类
object AppDatabaseHelper {privatevar appDatabase: AppDatabase
init {//MyApp 是自定义application类
val appContext =MyApp.instance.applicationContext
appDatabase= Room.databaseBuilder(appContext, AppDatabase::class.java,"mydb")
.allowMainThreadQueries()
.fallbackToDestructiveMigration()//升级数据库版本 清空数据库//.addMigrations(MIGRATION_1_2,...) 可以自己定制数据库迁移
.build()//比如1版本升级2版本 消息表增加了一个字段msgId//val MIGRATION_1_2 = object :Migration(1,2){//override fun migrate(database: SupportSQLiteDatabase) {//database.execSQL("ALTER TABLE t_msg "//+ " ADD COLUMN msgId TEXT");//}//}
}
fun getInstance(): AppDatabase {returnappDatabase
}
}
最后是使用
private val userDao =AppDatabaseHelper.getInstance().userDao()//调用dao的各种方法就可以使用了//需要注意,不能再主线程使用
android room 教程,android room 使用相关推荐
- Android 相机教程,Android 相机教程
Android相机教程 相机主要用于捕获图片和视频.我们可以通过使用相机API的方法来控制相机. Android通过以下两种方式提供了在相机上工作的功能: 通过相机意图 通过相机API 了解相机意图和 ...
- Android精通教程-Android入门简介
前言 大家好,我是 Vic,今天给大家带来Android精通教程-Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease ...
- android+notepad教程,Android平台应用开发实例:Notepad
在这个教程中将会建立一个简单列表界面,允许用户添加删除,但是不能编辑.包括如下的内容: ◆ListActivities的基础知识和如何建立菜单项. ◆如何使用SQLite 数据库访问数据. ◆如何使用 ...
- android打开教程,Android 打开网络上pdf文件
1.基本思路: 打开网络pdf 思路整体还是来源与图片的加载. android中加载网络图片的框架有很多个.如image-laoder, fresco.glide等,首先都是从内存中找图片,如果内存中 ...
- android开发教程,android开发入门教程
所谓知己知彼才能百战百胜,想学好android就必须先了解 android是什么意思 android环境搭建 Android一词的本义指"机器人",同时也是Google于2007年 ...
- sqlite数据库android使用教程,Android开发教程之 SQLite数据库的使用
在开发Android应用程序时经常需要存储数据,Android系统提供了SQLite数据库,还提供了SQLiteOpenHelper类,使我们可以很方便的操作数据库.通过一个例子来说明在Android ...
- android fragment 教程,Android app开发中的Fragment入门学习教程
在Android3.0上开始引入了一个新概念叫Fragment.它有自己的布局文件,可以作为组件排布,也可以相互组合去实现不同的布局显示.使用Fragment可以重复利用代码,并且可以满足不同设备尺寸 ...
- android广播教程,Android学习笔记(广播机制)
1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...
- android混淆教程,Android 实现代码混淆的实例
Android 实现代码混淆的实例 1.简介 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为. 混淆的目的是为了加大反 ...
- android 动画教程,Android 动画Animation
动画分为视图动画(view animation)和属性动画(property animation),视图动画又分为帧动画和补间动画 视图动画控件(iv)点击事件(OnClickListener接口)触 ...
最新文章
- Linux bash逐行读取文件的方法
- ASP.NET MVC的ContentResult
- rhcs集群套件—红帽6的高可用
- 抓包工具mitmproxy环境配置使用(一)
- 20175202 《Java程序设计》第九周学习总结
- 现代浏览器工作原理(一)
- Mssql,Access的sql经典SQL语句大全
- 计算机十二种常用密码的破解方法
- 宽带网速如何测试软件,怎样测试网速 多种测试网速方法【推荐】
- matlab进化树的下载,MEGA进化树下载
- 如何将图片转成Excel表格
- 实体消歧(链接到实体库)
- [资料分享] 干货~WLAN从入门到精通系列-WLAN技术连载帖汇
- data在python_Fake data的使用和产生 - Python篇
- 【学习笔记】无限极分类学习
- dva使用及项目搭建
- 美团外卖API接入(二)
- Windows睡眠,CPU风扇仍然运转的问题
- 洛谷3379-LCA-C++-(LCA+倍增)
- ETL(八):路由器(rounter)转换组件的使用
热门文章
- 知识资源整理(持续更新)
- 带通滤波器幅频特性曲线图_滤波器知识,你所要的,都在这里
- 【SDOI2008】Sandy的卡片 DP
- LoRa vs LTE-M vs Sigfox
- 089 定积分之双纽线、心形线、摆线
- win10计算机丢失msvcr,win10计算机丢失MSVCR120文件怎么办
- 数据结构最常用的排序算法一(冒泡、插入、选择)-Java实现
- 前端——列表、表格、表单
- js实现缓慢回到页面顶部
- Linux下Ubuntu的常用压缩、解压缩命令,以及tar中的参数 cvf,xvf,cvzf,zxvf的区别