文章总结: 这篇文档详细介绍了在Android应用中实现数据持久化的方法,重点讲解了Room数据库的使用。文章从设置KSP插件和Room依赖开始,逐步展示如何创建数据实体、DAO接口和Database类,最后在ComposeUI中实现用户注册和登录功能。通过这些步骤,开发者可以在没有后端服务器的情况下,使用本地数据库进行用户身份验证和数据存储。文档提供了详细的代码示例和配置说明,适合Android开发者学习数据持久化技术。 综合评分: 89 文章分类: 移动安全,数据安全,应用安全
【Android学习笔记】第7课 数据持久化与Room数据库
网安小杨
网络安全小杨
2025年12月19日 13:26 浙江
在第6课我们设计了登录界面,当用户在输入信息后,需要把数据保存下来,并做身份验证,这就涉及到数据持久化与数据库等相关知识。
Androdir数据库,最佳选择当然是网络数据库,但在后瑞服务器还未搭建完毕的情况下,我们先使用本地数据库做测试。本地轻量级数据库首推SQLite ,最新版的Android Studio对SQLite做了进一步的抽象封装,形成Room数据库。我们这节课就来学习Android主推的Room库,请打开第6课创建的项目工程。
一、设置插件与依赖
在最新版本的Android Studio使用Room库,需要设置ksp插件和Room依赖。KSP(Kotlin Symbol Processing)是一种专为Kotlin设计的注解处理器框架,与传统的Kapt相比,KSP直接解析Kotlin的抽象语法树(AST),从而跳过了Java编译器的中间转换步骤。这样一来,不仅可以提升编译速度,还可以大幅降低内存消耗。
1、设置KSP插件
在哪里设置呢?请看下图:
第1个红框和第4个红框标示的文件都叫build.gradle.kts,但位置不同,功能和意义也不相同。第1个在app目录下,被称为“模块级gradle配置文件”,第4个在根目录下,被称为“项目级gradle配置文件”。我们设置ksp插件和Room依赖,都在这两个文件里。(温馨提示:此图标示的其他配置文件也很重要,请一并加以关注。)
打开标记为4的build.gradle.kts,添加ksp插件,如下图红框所示,然后点右上角的“Sync Now”:
上图中的ksp版本号要与使用的kotlin版本号相一致。如何查看Kotlin版本号呢?请打开本文第一幅图中第3个红框标示的libs.versions.toml文件,里面[versions]下的kotlin = “2.0.21”即为版本号。
打开标记为1的build.gradle.kts,在plugins后面的大括号里,添加ksp插件,如下图红框所示,然后点右上角的“Sync Now”:
2、设置Room依赖
在标记为1的build.gradle.kts的dependencies大括号里,添加Room依赖,以红框标出,然后点击右上角的“Sync Now”:
二、定义数据实体
设置完毕,我们开始创建与数据有关的Entity、Dao及Database等文件。为了方便查看,我们创建一个data包(也就是文件夹),把这些文件都放在这个包里。
1、创建data包
在项目的包文件上单击右键,选择“New”,选择“Package”,输入新包名:com.example.kjwz2025.data,然后回车。
这样,在项目包com.example.kjwz2025的下面,就出现了新的data文件夹,如下图所示:
2、定义数据实体userEntity
在刚才创建的data包上,右键,选择“New”—“Kotlin Class/File”:
在打开的界面上输入:userEntity,并选择下面的Data class,然后回车:
在创建的userEntity文件里,输入代码,创建Room库需要的数据实体,代码如下:
所谓“数据实体Entity”,可以简单地理解为数据库的表结构。如这里创建了数据类Usr,它有三个属性:1是可以自动产生的主键id,,Int型的,类似于我们常说的序号;2是name,String型的,对应用户的账号;3是pwd,也是String型的,对应用户的密码。
三、创建Dao接口
DAO(Data Access Object)是用于封装数据库操作的常用设计模式,它可以帮助我们更好地管理数据库的访问逻辑,使得代码更加模块化、易于维护和测试。简单地理解就是用来操作数据库的。
仿照前面创建userEntity那样,在data包里创建一个userDao,,输入名称时,选择Interface,如下图所示:
userDao的代码如下:
userDao是一个接口,里面定义了insert、update、delete、query共五个方法,对应数据库的增删改查等操作。其中Query有两个,分别是整体查询和有条件查询。这些方法通过suspend实现异步查询,我们后面在操作数据库时将会用到。
四、创建Database类
数据库是由库(database)和表(table)构成,如果说前面的Entity对应的是表,那么这里的Database对应的就是库。
创建方法跟上面一致:在data包里,创建userDatabase文件,代码如下:
这里创建了两个类,一个是抽象类AppDatabase,定义了抽象方法userDao。一个是继承Application的普通类MyApplication,它在启动时调用Room.databaseBuilder初始化了数据库user_database。
五、在composeUI中实现数据库操作
通过以上四步,我们就完成了Room数据库的准备工作,接下来我们就要在UI界面中进行数据库的增删改查等操作了。
1、注册用户
在第6课项目代码中,找到@Composable 标注的Register函数,我们先声明下面的5个变量:
前3个之前就已存在,后2个是新添加的,请重点关注:一个是声明User类型的对象列表,一个是声明协程。协程类似线程,一些耗时较大的操作放在协程里进行,可以保证主进程的正常运行。
然后再创建2个函数:
InsertUser()用于将用户注册的账号和密码存入数据库,并弹出“注册成功”的提示。CheckUser()用于检查用户输入的账号是否已经注册过,如果未注册,则调用InsertUser注册账号。
在Regster函数的Column布局中,我们添加了两个TextField组件,一个Button组件,与第6课设计的登录界面一样,不再赘述。Button组件的onClick参数稍微复杂一些,见下图:
先判断账号和密码框是否为空,如为空则给出提示。如果不为空,则调用上面设计的CheckUser函数,实现账户检查和存入数据库等操作。
2、用户登录
在第6课项目代码中,还有一个@Composable 标注的Login函数,用于用户登录,这个也涉及到数据库操作,需要添加一些代码。
首先,也是声明5个变量,跟注册用户之处的完全一样,不赘述。
其次,创建检查账号函数CheckUser,与注册用户之处的稍有变化,见下图:
通过检查数据库,返回users对象列表。如果users.size为0,即users对象不空,也就是查无此人,给出“账号不存在”的提示。如果users不为空,即是合法账号,刚通过navigate导航到主界面。
第三,登录按钮的onClick设置,如下图所示:
即先判断两个TextField框是否为空,如果不为空,则调用CheckUser函数,检验用户身份后实现页面导航。
通过上述代码,我们基本上实现了本地数据库的查询和存储,至于数据库的更新和删除,我们后面还会讲解。
最后别忘了注册MyApplication类。请打开app.src.main下的AndroidManifest.xml文件,在application下面第一行添加红框内的代码:
现在可以在模拟器里跑一下代码了,先注册个账号,然后用所注册的账号登录,看看是Room数据库能否正常运行。
最后再提示一点:本节课要添加相关插件和依赖,并要导入许多库文件,缺少任何一项就会报错,所以一定要认真仔细。
查看原文:《【Android学习笔记】第7课 数据持久化与Room数据库》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论