我有一个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)
但我怎么知道帖子何时被删除?
答案 0 :(得分:2)
LiveData<List<Post>> getPosts();
会返回由{em>发布表格中的任何LiveData
,insert
或update
更新的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