2016-07-14 2 views
1

영역이있는 메모 앱을 만들고 있습니다. 백업 기능을 추가하고 기능을 복원하고 싶습니다. 따라서 this page에 소개 된대로 이러한 기능을 구현했습니다. 다음은 사용자 시나리오입니다.android realm : 백업 파일에서 영역 DB 복원

  1. 사용자가 클릭 백업 버튼을 다시 default.realm까지
  2. 을 temp.realm 수와 사용자가 복원 버튼을 클릭 temp.realm하는 default.reaml를 교체합니다.
  3. 데이터를 다시로드하고 새 데이터로 표시합니다 (대체 된 default.realm 파일).

응용 프로그램을 다시 시작하면 제대로 작동합니다. 하지만 새로운 데이터를 즉시 새로 고침하고 싶습니다. 응용 프로그램을 다시 시작하지 않으면 이상하게 작동합니다. 그래서 내 질문은 응용 프로그램을 다시 시작하지 않고 데이터를 복원 할 수 있도록 복원 된 영역 db를 다시로드 할 수있는 방법입니다.

답변

2

temp.realm에서 default.realm을 복사하기 전에 이전 default.realm을 참조하는 모든 열린 Realm 인스턴스를 닫아야합니다. 이러한 인스턴스는 여전히 파일 설명자를 보유하고 있으므로 복사 후에 새로 열린 Realm 인스턴스는 다른 파일 설명자를 보유하게되므로 영역은 완전히 같기 때문에 Realm은 여전히 ​​동일한 영역이라고 생각합니다. 이것은 영역이 처리 할 수없는 상황이며 일부 이상한 일이 발생할 수 있습니다.

Realm.deleteRealm()으로 전화하여 이전 default.realm을 먼저 삭제할 수 있습니다. 이 API는 삭제 될 영역 파일에 다른 Realm 인스턴스가있는 경우 throw됩니다.

+0

이 문제는 해결되었습니다. 당신의 대답은 정말 도움이되었습니다. 영역 인스턴스를 열고 닫은 모든 코드를 찾았습니다. 그 후, 그것은 잘 작동합니다. 고마워 ~ !!! :) –