Android数据库-Room框架

1、阶段一

数据库的操作一般放在子线程中进行,因为主线程是UI线程,写在主线程中可能出错。这一阶段主要讲Entity、Dao、Database,实现一个数据库的基本操作。添加依赖

Entity创建

Dao(Database access object)创建

Database创建

MainActivity中通过按钮调用增删改查操作



注:系统会帮我们生成WordDao_Impl.java,所以Room框架还是很方便的。

2、阶段二

这一阶段主要讲AsyncTask 和Repository,对阶段一进行四个方面的完善。第一,引入LiveData,不用每次都调用updateView();第二,将DataBase类修改为singleton 单例模式,保证其只有一个实例;第三,引入AsyncTask,后台执行子线程;第四,引入ViewModel,来管理界面数据,使得MainActivity里面的数据得到精简。

改善一


改善二

注:可以添加synchronized关键字,进一步加强singleton强度,保证当有多个客户端访问INSTANCE时,采用排对机制,保证只会有一个INSTANCE生成。

改善三


改善四



此时,已经基本修改完成。但是ViewModel 的职责是管理界面的数据,数据的获取不应该属于ViewModel,如插入、修改数据等。我们应该创建仓库类,来实现对数据的直接操作。

创建WordRepository

这个类的职责就是获取数据,如本地数据库、或者云端数据库等。

3、阶段三

使用RecyclerView 呈现列表数据,强调资源的回收,就是滚动出屏幕的视图就会被回收,重复使用,提高资源使用。主要效果为,可以插入多条信息,然后利用RecyclerView 显示在页面上,呈现两种效果,一种是用普通的cell组成,一种是card 形式呈现,外观很相似。两种可以相互切换。

效果图,第一张是普通cell组成,第二张是card cell 组成。

创建普通cell 单元显示列表信息

效果如下图,这是一个cell。

MainActivity.java内容



添加点击后出现波纹效果

适配器编写

4、阶段四

数据库结构的改变与版本的迁移

如果数据库需要添加新的一列,需要进行版本迁移,如下图,但是删除某一列时,由于SQLite是轻量级的数据库,不具备Drop 关键字,所以删除列操作比较麻烦。

数据库层面的修改


UI界面修改

添加一个switch 按钮,点击可以选择是否显示中文意思。

修改适配器


修改MainActivity.java
结束!