我有一个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
,该由任何insert
、update
或delete
对Post表执行
。因此,如果您最初正在观察列表,那么您已经在观察插入/更新/删除。
您观察所有项目(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:更新插入的实时数据回调?