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
结束!