如何使用Architecture Components观察数据库删除事件

时间:2017-10-11 14:56:27

标签: java android android-sqlite android-room android-architecture-components

我有一个DAO如下。

@Dao
public interface PostDAO {
    @Query("SELECT * FROM posts order by time DESC")
    LiveData<List<Post>> getPosts();

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    @NonNull
    void insert(Post... posts);

    @Delete
    void delete(Post post);

    @Query("SELECT * FROM posts WHERE id = :id")
    Post getPost(String id);

    @Query("SELECT * FROM posts WHERE id = :id")
    LiveData<Post> getPostLiveData(String id);
}

我知道我可以通过以下内容收听新添加的数据。

postDAO().getPosts().observe(builder.getLifecycleOwner(), data::postValue)

但我怎么知道帖子何时被删除?

2 个答案:

答案 0 :(得分:2)

LiveData<List<Post>> getPosts();会返回由{em>发布表格中的任何LiveDatainsertupdate更新的delete

因此,如果您最初观察列表,那么您已经在观察插入/更新/删除。

答案 1 :(得分:1)

您会观察所有项目(LiveData<List<Post>>),并在事情发生变化时立即收到新数据通知。

您可能希望使用可以显示受影响的更改的新DiffUtil

另一种方法是在删除后设置/更新LiveData的值。返回长意味着它返回已删除行的计数。

@Delete void delete(Post post) : Long

LiveData data = new MutableLiveData<Post>()
if (yourDao.delete(yourItem) > 0) data.setValue( yourItem ) 

我写了一个答案,为什么删除和插入不在Android Room : LiveData callback of update insert?

使用LiveData