android项目实战 Android JetPack架构篇,一个实战项目带你学懂JetPack( 二 )


使用LiveData的目的是管理数据的更新。但是,LiveData类不提供更新数据的公共方法。我们应该使用可变的数据,它有两个公共的方法(setValue(T)和postValue(T))来存储数据。一般在ViewModel中使用可变的LiveData,然后ViewModel只向观察者公开不可变的LiveData对象。
在WordDao中,更改getAllWords()方法的返回值:
@查询(“SELECT * from word _ table order by word ASC”)
LiveData&lt。列表&lt。Word & gt&gt。getall words();
稍后,我们将在MainActivity的onCreate()方法中创建一个Observer对象,并覆盖它的onChanged()方法。当LiveData更改时,将通知观察者,并回调onChanged()。此时,您可以更新适配器中的缓存数据,然后更新适配器中的UI。
添加房间数据库
什么是Room数据库?Room是SQLite之上的数据库层。房间用来处理我们以前用SQLiteOpenHelper处理的任务。
Room通过DAO向数据库发送查询默认情况下,为了避免降低UI线程的性能,Room不允许在主线程中执行数据库操作Room提供了编译时的SQL语句检查创建的Room类必须是抽象的,并且继承RoomDatabase通常,在整体应用中只需要一个Room数据库实例,即单例。实现Room数据库创建一个public abstract类WordRoomDatabase,并继承RoomDatabase。即public abstract class WordRoomDatabase extends RoomDatabase {}标注其为一个Room数据库,@Database(entities = {Word.class}, version = 1),声明其在数据库中的实体,并指定版本号。实体可以声明多个,声明的实体将在数据库中创建对应的表。定义使用数据库的DAO。给每一个@Dao提供get方法。public abstract WordDao wordDao();完整的代码如下:
@数据库(实体= {Word.class},版本= 1)
publicatabstractclass WordRoomDatabaseExtendsRoomDatabaSe {
publicatabstractWordDao WordDao();
}
使WordRoomDatabase作为单例。privatedstativatilewordroomtabase实例;
static WordRoomDatabaSe GetDatabaSe(FinanceContext上下文){
if(INSTANCE == null) {
同步(WordRoomDatabase.class) {
if(INSTANCE == null) {
//在此创建数据库
}
}
}
returnINSTANCE
}
实例化RoomDatabase对象:使用Room的databaseBuilder,从WordRoomDatabase类的应用上下文context中创建RoomDatabase对象,并将数据库全名为"word_database"。// Createdatabasehere
INSTANCE = room . DatabaseBuilder(context . GetAPPlicationContext(),
WordRoomDatabase.class," word_database ")
。build();
以下是完整的代码:
@数据库(实体= {Word.class},版本= 1)
publicatabstractclass WordRoomDatabaseExtendsRoomDatabaSe {
publicatabstractWordDao WordDao();
privatedstativatilewordroomtabase实例;
static WordRoomDatabaSe GetDatabaSe(FinanceContext上下文){
if(INSTANCE == null) {
同步(WordRoomDatabase.class) {
if(INSTANCE == null) {
INSTANCE = room . DatabaseBuilder(context . GetAPPlicationContext(),
WordRoomDatabase.class," word_database ")
。build();
}
}
}
returnINSTANCE
}
}
创建存储库(数据仓库)
什么是Repository?存储库是一个可以访问多个数据源的类。它不是架构组件库的一部分,但它是代码分离和架构的最佳实践建议。存储库用于处理数据操作,并为应用程序提供数据访问接口。

为什么要使用Repository?存储库管理查询线程,并允许您使用多个后端。在最常见的例子中,存储库实现了决定是从网络获取数据还是从本地缓存获取结果的逻辑。
Repository的实现创建一个公共类WordRepository添加两个成员变量privateWordDao mWordDao
隐私数据&lt。列表&lt。Word & gt&gt。mAllWords
添加一个构造函数,该构造函数获取数据库的句柄并初始化成员变量。文字储存库(应用程序){

推荐阅读