我正在從服務器獲取數據并保存在房間數據庫中,然后從房間中將其顯示在回收站視圖中。數據完美地保存在房間數據庫中并顯示在回收站視圖中。問題:當我從服務器數據庫中刪除一些數據時,之前保存的舊副本仍然存在于房間中。我想要什么:我不想在回收者視圖中顯示從服務器刪除的數據。那么如何根據服務器響應更新房間數據庫。這是我到目前為止所做的:UserDao.java@Daopublic interface UserDao {@Insert(onConflict = OnConflictStrategy.REPLACE)void Insert(User... users);@Query("SELECT * FROM Users")LiveData<List<User>> getRoomUsers();}User.java@Entity(tableName = "Users")public class User {@NonNull@PrimaryKeyprivate String id;@ColumnInfo(name = "name")@SerializedName("name")@Exposeprivate String name;@ColumnInfo(name = "age")@SerializedName("age")@Exposeprivate String age;public User(String id,String name, String age) { this.id = id; this.name = name; this.age = age;}public String getId() { return id;}public void setId(String id) { this.id = id;}public String getName() { return name;}public void setName(String name) { this.name = name;}public String getAge() { return age;}public void setAge(String age) { this.age = age;}}
1 回答

holdtom
TA貢獻1805條經驗 獲得超10個贊
您可以在插入新數據之前刪除表以實現它使用下面的代碼:
@Dao
public abstract UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract void Insert(User... users);
@Query("SELECT * FROM Users")
abstract LiveData<List<User>> getRoomUsers();
@Insert(onConflict = OnConflictStrategy.IGNORE)
abstract void insert( List<Users> list);
@Query("DELETE FROM Users")
abstract void deleteAll();
@Transaction
void deleteAndInsert(List<Users> list){
deleteAll();
insert(list);
}
}
現在您可以使用userDb.deleteAndInsert(list)方法 after List<User> list = response.body(); 與服務器同步數據。
添加回答
舉報
0/150
提交
取消