データベースをバックアップする際の参考になります。私は現在、あなたが上で説明しているのと同じ方法で私のアプリでこれを行います。この方法でバックアップを作成するときは注意してください。これは大部分の場合はうまくいくが、問題は、作成されたバックアップがすべてのデバイスとAndroidバージョンとの互換性が保証されていないことである。私はこれを初めて聞いたときにこれが奇妙に聞こえたと思っていましたが、私は今それが真実であることを発見しています。私は最近、データの欠落、データの消失などのいくつかの報告を受けています。これは、ユーザーが別のデバイスまたは異なるAndroidバージョンまたはROMからバックアップをリストアしていたときに起こっていました。彼らのうちのいくつかが私に直接連絡してくれました。それは素晴らしかったので、バックアップファイルをテストして調べることができました。私はそれらを復元しようとしたとき、私は次のlogcatエラーになるだろう:android.database.sqlite.sqlitedatabasecorruptexception:データベースのディスクイメージが
だった私は何を見つけ出すたことを、主に、特定のHTCデバイスといくつかのカスタム不正な形式でありますROMは他のデバイスやROMに復元しないバックアップを作成していました。データベースは本当に壊れていませんでしたが、アンドロイドはそれがだと思いました。私はそれらをSQLiteブラウザに取り込み、データもそこには表示されません。新しいバージョンのSQLiteでは、デフォルトでWAL(Write Ahead Logging)が有効になっており、有効にされ、そのデータベースでバックアップが作成されていれば、古いバージョンのSQLiteに復元することはできません。いくつかの奇妙な理由)。そこで、私は "PRAGMA journal_mode = DELETE"でWALを無効にして、ブラウザでデータベースを表示でき、テストデバイスで正常にリストアできました。もう1つの問題は、コード内でこの例外をキャッチする方法がないように見えることと、この例外を跨いだときにAndroidが自動的にデータベースを削除することです(私の意見ではAndroidの管理上の非常に悪い管理です)。
長い応答で申し訳ありませんが、私はこの種のバックアップで何が起こっているのかを説明したかったのです。 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でトランザクションを使用して、データがすべて書かれているかどうかを確認していますか? –