如何使用体系结构组件观察数据库删除事件



我有一个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)

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

>LiveData<List<Post>> getPosts();返回一个LiveData,该由任何insertupdatedeletePost表执行

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

您观察所有项目(LiveData<List<Post>>),并在发生更改时立即收到新数据的通知。

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

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

@Delete void delete(Post post) : Long
LiveData data = new MutableLiveData<Post>()
if (yourDao.delete(yourItem) > 0) data.setValue( yourItem ) 

我写了一个答案,为什么删除和插入没有在Android房间使用LiveData:更新插入的实时数据回调?

最新更新