Android体系结构组件:如何观察数据库中的单个更改

我有几个问题,请看下面的问题:

守则

DAO

@Dao public interface PostDao { @Query("SELECT * FROM posts ORDER by time DESC") LiveData<List> getAll(); @Query("SELECT * FROM posts WHERE id = :id") LiveData<List> getPost(String id); @Insert(onConflict = OnConflictStrategy.REPLACE) @NonNull void insert(StoryPost... posts); @Delete void delete(StoryPost post); @Update void update(StoryPost post); } 

D b

 @Database(entities = {StoryPost.class}, version = 5) @TypeConverters(Conveter.class) public static abstract class AppDatabase extends RoomDatabase { private static AppDatabase INSTANCE; static AppDatabase getDatabase(Context context) { if (INSTANCE == null) { INSTANCE = db(context); } return INSTANCE; } public abstract PostDao postDAO(); } 

模型视图

 public static class PostsViewModel extends AndroidViewModel { private final mLiveData data; public PostsViewModel(Application application) { super(application); data = new mLiveData(application); } public LiveData<List> getData() { return data; } public void delete(StoryPost post) { AsyncTask.execute(() -> db(getApplication()).postDAO().delete(post)); } } 

实体(Kotlin)

 @IgnoreExtraProperties @Entity(tableName = "posts") class StoryPost : Serializable { @PrimaryKey var id: String? = null var time: Long = 0 var story: StoryPojo? = null @Embedded var user: User? = null constructor() { } } 

LiveData

 public static class mLiveData extends LiveData<List> { private final Context context; public mLiveData(Context context) { this.context = context; loadData(); } private void loadData() { } @Override protected void onActive() { } @Override protected void onInactive() { } } 

问题1:

有了上面的代码,我的理解是,我应该观察使用viewModel数据如下。 我想使用ViewModel,但是在“观察”时我没有收到任何数据,我该如何解决这个问题?

 PostsViewModel model = ViewModelProviders.of(this).get(PostsViewModel.class); model.getData().observe(this, data -> { adapter.addList(data); }); 

但是,这不会返回任何数据,而以下效果:

 LiveData<List> liveData = postDAO(context).getAll(); AsyncTask.execute(() -> { liveData.observeForever(storyPosts -> postValue(storyPosts)); }); 

问题2 :

如果我使用这个:

 LiveData<List> liveData = postDAO(context).getAll(); AsyncTask.execute(() -> { liveData.observeForever(storyPosts -> postValue(storyPosts)); }); 

我如何观察数据库中的单个更改,例如删除行或添加新行时?