我正在使用RoomDb使用会议室数据库将消息存储在设备中。每条消息都包含在服务器上存储消息时生成的唯一ID。 当邮件被下载并存储在Room数据库中时,如果我尝试下载该邮件,它将再次被下载并保存到房间db。
我尝试使用替换策略,但它仍无效
@Insert(onConflict = OnConflictStrategy.REPLACE)
void saveMessage(ArrayList<Message> messages);
上面的代码应该替换现有的消息,但它没有这样做。
消息模型看起来像这样。
public class Message {
@Exclude
@PrimaryKey(autoGenerate = true)
public long _id;
@Exclude
@ColumnInfo(name = "messageId")
public String id;
@Exclude
public boolean outbox;
@Exclude
public boolean pending;
@Exclude
public boolean draft;
@Exclude
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
public byte[] thumbnail;
@Exclude
public boolean downloaded;
@Exclude
public boolean seen;
@Exclude
public boolean liked;
@Exclude
public boolean disliked;
@Exclude
public String path; // Local attachment path
@Exclude
public String localFilePath; //Local attachment file path
public String title;
public String body;
public String type;
public String image;
public String file;
public String audio;
public String video;
}
答案 0 :(得分:2)
你必须像这样改变你的实体类
@Entity(tableName = "chat_message_table", indices = @Index(value = {"messageId"}, unique = true))
public class Message {
...
}
答案 1 :(得分:1)
每次保存模型时,都需要搜索数据库是否存在。搜索条件应该是显着的,可以找到唯一的消息。在这里,您可以使用messageId作为搜索条件。如果存在,请更新它。如果没有,请创建新消息并插入。