Мне просто интересно, является ли то, что я делаю для обновления всей таблицы в области, является правильным безопасным подходом. Я получаю список разговоров с сервера и обновить БД так:Обновить таблицу в реальном времени
@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: Имейте в виду, что я удаляю все из db, потому что мне больше не нужны разговоры в моем db, которые больше не существуют на сервере.
не было известно сделка будет возвращены, если это не удастся, это довольно интересная особенность. Спасибо вам за использование вашего подхода1 – feresr
Да, это то, что делает 'executeTransaction()', иначе это будет вручную 'realm.beginTransaction()', 'realm.commitTransaction()' и 'realm.cancelTransaction()'. Примеры часто игнорируют «realm.cancelTransaction()» при ошибке, несмотря на то, что очень важно отменить транзакцию записи при сбое. – EpicPandaForce