在本篇博文里使用了 AppDatabase(RoomDatabase), DataRepository, Room Dao, LiveData, ViewModel, 默认读者知道这些,本文对这些部分进行了省略.
在Room中,对于 insert ,update, query 需要使用后台线程,否则就会报错:java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time
.
对于在后台操作数据库,我们可以使用AsyncTask
,RxJava 2
,和BasicSample示例中使用的Executor
。RxJava2的使用在上一篇博文有介绍,这里就主要讲述使用AsyncTask
和Executor
对数据库进行基本操作。
1. AsyncTask
@Dao
public interface ToDoDao {
@Query("select * from ToDoList where title = :key ")
ToDo getTaskItem(String key);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(ToDo entity);
@Update
void update(ToDo entity);
}