如何在房间持久性中用新列表替换项目列表?

时间:2017-08-11 15:03:27

标签: android persistence dao android-room

实体只包含一个项目ID,也就是primaryKey,我在数据库中存储例如3个项目,当列表更新时,我需要用新的3个项目替换现有列表新的一个。但在我的情况下,它增加了新的,但我需要完全取代现有的

  @Dao
public interface UserIdDao {
@Query("SELECT * FROM userIds")
Flowable<List<UserId>> allUserIds();

@Insert(onConflict = OnConflictStrategy.REPLACE)
 List<Long> update(List<UserId> ids);
}

@Entity
public class UserId{
  @PrimaryKey
  private Long id;

 @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

UserId userId = (UserFavoriteStore) o;

return (!id.equals(userId.id));
 }
@Override


public int hashCode() {
int result = id.hashCode();
result = 31 * result + (id.hashCode());
return result;
 }}

1 个答案:

答案 0 :(得分:3)

  

我需要用新的列表替换现有列表。但在我的情况下,它增加了新的,但我需要完全取代现有的

您编写了代码来检索ID和插入ID。您没有删除ID的代码。

因此,在DAO中添加def month=(m) if !m.numeric? m = Date::ABBR_MONTHNAMES.index(m.capitalize[0,3]) end @month = m.to_s.rjust(2, '0') end 方法可删除不再需要的ID。然后,当您想要替换ID时,请使用library(ggmap) geocode("Eiffel Tower") # lon lat # 1 2.294481 48.85837 方法删除不再需要的ID,并删除您想要的@Delete

@Delete说&#34;如果您尝试通过主键插入与现有行匹配的行,请不要崩溃,而是替换现有行中的其他列在插入新行之前删除有问题的行&#34; (见the SQLite docs)。在你的情况下:

  • 您没有其他专栏
  • 插入新ID与主键不匹配现有ID,因为您的数据完全是主键