Android体系结构组件-从房间中删除旧数据

tof*_*for 2 android android-room android-architecture-components

目前,我正在研究Android应用架构,我无法理解Github Repo Sample中的一件事。我们可以决定使用速率限制器或null检查来获取新数据,但是在这种情况下,我们只是将新值插入数据库中,而不会从数据库中删除旧值。例如,如果数据库中的旧结果之一从服务器中删除(用户删除的存储库)?它将仍在数据库中吗?我们如何消除这些价值?我是否缺少某些东西,或者这是未处理的案件?

小智 5

我想我有一个优化且更简单的解决方案。请帮助使它更简单!

// Dao class

@Dao
public interface UserDao {
    // ...    

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAll(List<User> users);

    @Query("DELETE FROM User WHERE User.id NOT IN(:lstIDUsers)")
    void deleteOldUsers(List<Integer> lstIDUsers);
}  
Run Code Online (Sandbox Code Playgroud)

//调用Dao的文件-示例:存储库类)

// First, convert and add all Json data to lstUsers

// Second, add only Json primary key elements 
// from lstUsers to a new list lstIDUsers

userDao.insertAll(lstUsers);
userDao.deleteOldUsers(lstIDUsers);
Run Code Online (Sandbox Code Playgroud)

这两个命令首先使用OnConflictStrategy.REPLACE插入所有元素,然后仅删除从远程或本地DB中删除的旧元素。

  • @toffor 这回答了“deleteOldUsers”的实现,这是解决所发布问题的一个很好的解决方案。这应该标记为答案。 (2认同)