我只是想知道我在更新整个表格时所做的是否是正确的安全方法。我从服务器收到一个对话列表,并像这样更新我的数据库:
@Override
public void saveConversations(final List<Conversation> conversations) {
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// Remove all conversations and replace with the one passed in
// Realm does not support cascade deletes. Remove messages as well
// https://github.com/realm/realm-java/issues/1104
realm.delete(Conversation.class);
realm.delete(Message.class);
realm.copyToRealmOrUpdate(conversations);
}
});
}
Conversation.java里面有一个RealmList消息:
public class Conversation extends RealmObject {
private RealmList<Message> messages = new RealmList<>();
这很有效,我找不到它的任何错误,但它看起来并不特别优雅。如果realm.copyToRealmOrUpdate(conversations);
出错怎么办?我会丢失所有数据。
无论如何,我知道这不太可能,但我想知道是否有更好的做事方式。
PS:请记住,我从数据库中删除了所有内容,因为我不希望我的数据库中的对话不再存在于服务器中。
答案 0 :(得分:0)
请勿忘记您正在执行交易,因此如果copyToRealmOrUpdate()
失败,则交易取消,这意味着您不会丢失你的所有数据。
就个人而言,我过去常常使用&#34;删除所有&#34;方法,如果您可以清除所有表格,那么它不会导致问题,但如果您有第三个表格,您指的是Conversation
和Message
(例如{ {1}}),您将使所有关系无效。所以我个人更喜欢像这样合并。
User.class
然后合并:
public class Contact {
@PrimaryKey
private long id;
@Index
private String name;
@Index
private String phoneNumber;
@Index
private boolean isBeingSaved; // this line is important
//getters, setters
}