2016-07-14 2 views
1

Я работаю над приложением примечаний с областью. Я хотел бы добавить функции резервного копирования и восстановления. Поэтому я реализовал эти функции, представленные в this page. Вот сценарий пользователя.android realm: Восстановление базы данных домена из резервного файла

  1. Когда нажатие кнопки резервного копирования пользователя, резервное копирование default.realm к temp.realm
  2. И пользователь нажмите кнопку восстановить, заменить default.reaml на temp.realm.
  3. Обновить данные и отобразить с новыми данными (заменен файл default.realm).

Это хорошо работает, если я перезапущу приложение. Но я хочу немедленно обновить новые данные. Если я не перезапустил приложение, это будет странно. Поэтому мой вопрос заключается в том, как я могу перезагрузить восстановленный мир db, чтобы отобразить восстановленные данные без перезапуска приложения.

ответ

2

Очень важно, чтобы перед копированием temp.realm в default.realm все открытые экземпляры Realm со ссылкой на старые default.realm необходимо закрыть. Поскольку эти экземпляры по-прежнему содержат дескриптор файла, а вновь открытые экземпляры Realm после копирования будут содержать другой файловый дескриптор, а Realm по-прежнему считают, что они являются тем же самым Realm, поскольку путь точно такой же. Это ситуация, с которой Царство не может справиться, и могут произойти некоторые странные вещи.

Вы можете позвонить по телефону Realm.deleteRealm(), чтобы удалить старый default.realm. Этот API будет бросать, если в файл области, который будет удален, будет открыт любой экземпляр Realm.

+0

Я решил эту проблему. Ваш ответ был действительно полезен. Я нашел каждый код, открывающий экземпляр области, и закрыл их. После этого он работает хорошо. Благодаря ~ !!! :) –

Смежные вопросы