0

私は以下のように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) 

投稿はいつ削除されたのですか?

答えて

1

あなたはすべての項目(LiveData<List<Post>>)を観察し、何かが変わるとすぐに新しいデータで通知を受けます。

新しいDiffUtilを使用して、影響を受ける変更を表示できます。

別の方法は、削除後にLiveDataの値を設定/更新することです。 Longを返すと、削除された行の数が返されます。

@Delete void delete(Post post) : Long 

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

私は削除し、挿入がポストテーブルに行わいかなるinsertによって更新されLiveDataupdate、またはdeleteを返しLiveData<List<Post>> getPosts();Android Room : LiveData callback of update insert?

+0

あなたの答えを編集する前に、あなたはあなたがそのコメントを精緻化することができますか? – Raghunandan

+0

あなたは何を意味するのか分かりません:-) DiffUtil(またはそのためのアンドロイドが提供するヘルパー)を使って変更をチェックするか、別のMutableLiveData <>を使って投稿された試行iveを使用して、かわった。ユースケースによって異なります。 「大きな」リストがある場合は、新しいLiveDataオブジェクトを使用するアプローチが最良の方法です。 –

+0

setValue()よりも "DiffUtilルーチン"の使用を推奨するのは賢明ではないでしょうか?私はdata.setValue()を使用していますが、投稿では、何かが正しくないです。 – Relm

1

でLiveDataを使用していない理由の答えを書きました。

リストを最初に観察している場合は、すでに挿入、更新、削除を監視しています。

関連する問題