데이터베이스를 백업하기 만하면됩니다. 나는 현재 앱에서 위에서 설명한 것과 같은 방식으로이 작업을 수행합니다. 이 방법으로 백업을 만들 때주의하십시오. 대부분의 경우 잘 작동하지만 문제는 생성 된 백업이 모든 기기 및 Android 버전과 호환된다는 보장이 없다는 것입니다. 나는 처음 들었을 때 이것이 이상하게 들렸다 고 생각했지만, 이제는 그것이 사실이라는 것을 알게되었습니다. 최근에 누락 된 데이터, 사라지는 데이터 등 여러 가지 보고서를 받았습니다. 이것은 사용자가 다른 장치 나 다른 Android 버전 또는 ROM에서 백업을 복원 할 때 모두 발생했습니다. 그들 중 몇 명은 저에게 직접 연락을했는데 훌륭한 사람이었습니다. 그래서 그들을 테스트하고 조사하기 위해 백업 파일을 얻을 수있었습니다. 내가 그들을 복원하려고 할 때, 나는 다음과 같은 로그 캣 오류가 발생합니다 : android.database.sqlite.sqlitedatabasecorruptexception : 데이터베이스 디스크 이미지가
이었다 내가 찾는 한 그, 주로 특정 HTC 장치와 일부 사용자 지정 형식이 잘못되었습니다 rom (어떤 장치에서든)은 다른 장치 나 ROM으로 복원하지 못하는 이러한 백업을 생성합니다. 데이터베이스는 실제로 손상되지 않았지만 안드로이드는 그들이 생각했다. 나는 그것들을 SQLite 브라우저로 가져갈 것이고 어떤 데이터도 거기에 나타나지 않을 것이다. 최신 버전의 SQLite는 기본적으로 WAL (Write Ahead Logging)이 활성화되어 있고 활성화되어 있고 해당 데이터베이스를 사용하여 백업 한 경우 이전 버전의 SQLite 또는 때로는 동일한 버전으로 복원 할 수 없습니다. 어떤 이상한 이유). 그래서 저는 "PRAGMA journal_mode = DELETE"로 WAL을 비활성화 시켰고 브라우저에서 데이터베이스를 볼 수 있었고 테스트 장치에서 정상적으로 복원 할 수있었습니다. 다른 문제는 코드에서이 예외를 잡는 방법이없는 것처럼 보이고 안드로이드는이 예외를 겪을 때 데이터베이스를 자동으로 삭제한다는 것입니다 (안드로이드 측에서 매우 나쁜 관리라고 생각합니다).
긴 응답을 드려 죄송합니다.하지만 이런 종류의 백업으로 내가 뭘보고 있었는지 설명하고 싶었습니다. SD 카드에서 범용 백업을 만드는 또 다른 방법을 찾으려고합니다. @ Kingamajick과 같은 csv 파일과 sql 스크립트를 작성하는 것은 그것을 수행하는 또 다른 방법 일 수 있다고합니다. 그것은 더 많은 코드와 더 많은 작업이지만, 그것이 어떤 장치, SQLite 버전과 ROM에서 작동한다면 그것은 그만한 가치가있을 것입니다. 고객의 데이터 손실은 결코 좋은 일이 아닙니다.
문제점을 발견 한 API 릴리스를 지정할 수 있습니까? –
Android 2.3을 실행하는 HTC 장치에서이 문제가 발생했습니다. 또한 CM7 및 CM9 ROM에서도 확인했습니다. 그것은 모든 HTC 장치, 가장 주목할 만하게 Desire 시리즈가 아니다. 분명히 그 HTC 장치와 Cyanogemod는 기본적으로 SQLite에서 활성화 된 WAL을 가지고 있으며 다른 ROM, 장치 또는 SQLite 버전과 잘 작동하지 않습니다. 더 많은 장치가 ICS와 최신 버전의 SQLite를 얻을 때, 4.0 이전 장치에서 생성 된 이러한 오래된 백업은 복원 할 때 문제가 될 것입니다. 2.3.3+이 출시되고 더 많은 장치가 FROYO에서 옮겨 질 때까지 이런 예외는 보지 못했습니다. – ssuperz28
Sqlite에서 트랜잭션을 사용하여 데이터가 모두 작성되었거나 전혀 작성되지 않았는지 확인하고 있습니까? –