【Android学习笔记】第7课数据持久化与Room数据库

admin 2025-12-22 04:02:55 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 这篇文档详细介绍了在Android应用中实现数据持久化的方法,重点讲解了Room数据库的使用。文章从设置KSP插件和Room依赖开始,逐步展示如何创建数据实体、DAO接口和Database类,最后在ComposeUI中实现用户注册和登录功能。通过这些步骤,开发者可以在没有后端服务器的情况下,使用本地数据库进行用户身份验证和数据存储。文档提供了详细的代码示例和配置说明,适合Android开发者学习数据持久化技术。 综合评分: 89 文章分类: 移动安全,数据安全,应用安全


cover_image

【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数据库》

评论:0   参与:  5