[解決済み] Androidのバックアップ/リストア: 内部データベースのバックアップ方法
質問
私は
BackupAgentHelper
を実装しました。
FileBackupHelper
を使用して、私が持っているネイティブデータベースをバックアップおよびリストアします。これは、通常使用するデータベースと一緒に
ContentProviders
に存在するもので
/data/data/yourpackage/databases/
.
これはよくあるケースだと思うでしょう。しかし、ドキュメントではどうすればよいのかが明確ではありません。
http://developer.android.com/guide/topics/data/backup.html
.
はありません。
BackupHelper
は、これらの典型的なデータベースのために特別に用意されています。したがって、私は
FileBackupHelper
で私の .db ファイルを指し示し、"
/databases/
を指定し、あらゆるdb操作のロックを導入しました。
db.insert
のような)
ContentProviders
を作成し、さらに "
/databases/
の前に " ディレクトリを作成しました。
onRestore()
というディレクトリは、インストール後には存在しないためです。
私は同様の解決策を
SharedPreferences
に同様のソリューションを実装し、過去に別のアプリで成功しました。しかし、エミュレータ-2.2 で新しい実装をテストすると、バックアップの実行が
LocalTransport
にバックアップが実行され、ログから復元が実行されているのがわかります(そして
onRestore()
が呼び出される)。
しかし、dbファイルそのものは決して作成されません。
これはすべてインストール後であり、リストアが実行された後、アプリの最初の起動の前であることに注意してください。それとは別に、私のテスト戦略は http://developer.android.com/guide/topics/data/backup.html#Testing .
また、私が自分で管理している sqlite データベースや、SD カード、自分のサーバー、または他の場所へのバックアップについて話しているのではないことに注意してください。
私は、データベースに関するドキュメントで、カスタム
BackupAgent
を使用するよう助言しているデータベースについての記述を見ましたが、関連性はないようです。
しかし、必要であれば BackupAgent を直接拡張する必要がある場合があります。 * データベース内のデータをバックアップする。SQLite データベースがあり、それを SQLite データベースがあり、ユーザがアプリケーションを再インストールしたときに SQLite データベースがあり、ユーザがアプリケーションを再インストールしたときに復元したい場合 カスタムBackupAgentを構築する必要があります。 バックアップ操作中に適切なデータを読み取る バックアップ操作の間に適切なデータを読み取り、次に テーブルを作成し、リストア操作中にそのデータを挿入します。 リストア操作の間にデータを挿入します。
少しわかりやすくお願いします。
本当にSQLレベルまで自分でやる必要があるのなら、以下のようなトピックが心配です。
-
開いているデータベースとトランザクション。私のアプリのワークフロー外のこのようなシングルトン クラスからそれらを閉じる方法がわかりません。
-
バックアップが進行中で、データベースがロックされていることをユーザーにどのように通知するか。長い時間がかかるかもしれないので、プログレスバーを表示する必要があるかもしれない。
-
リストア時に同じことをするにはどうしたらよいでしょうか。私の理解では、リストアは、ユーザーがすでにアプリを使い始めた(そしてデータベースにデータを入力した)ときに起こるかもしれません。そのため、バック アップされたデータをそのままリストアする(空または古いデータを削除する)ことはできません。何らかの方法でそれを結合する必要がありますが、id の関係上、トリビアルでないデータベースでは不可能です。
-
リストア完了後に、ユーザーを到達不可能なポイントで立ち往生させることなく、アプリをリフレッシュする方法。
-
バックアップまたはリストア時に、データベースがすでにアップグレードされていることを確認できますか? そうでなければ、期待されるスキーマが一致しないかもしれません。
どのように解決するのですか?
よりクリーンな方法としては、カスタム
BackupHelper
:
public class DbBackupHelper extends FileBackupHelper {
public DbBackupHelper(Context ctx, String dbName) {
super(ctx, ctx.getDatabasePath(dbName).getAbsolutePath());
}
}
に追加し、それを
BackupAgentHelper
:
public void onCreate() {
addHelper(DATABASE, new DbBackupHelper(this, DB.FILE));
}
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】「android:allowBackup」とは何ですか?
-
[解決済み] Android Lintが翻訳されていない文字列を訴えないようにする。
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] WhatsAppでメッセージを送信する