これは、動作中のDB復元のコアコードです(if (dbfile
から) ..try
。
private static final int BUFFERSZ = 32768;
private byte[] buffer = new byte[BUFFERSZ];
........
dbfile = new File(currentdbfilename);
.......
if (dbfile.delete()) {
origdeleted = true;
}
FileInputStream bkp = new FileInputStream(backupfilename);
OutputStream restore = new FileOutputStream(currentdbfilename);
copylength = 0;
while ((copylength = bkp.read(buffer)) > 0) {
restore.write(buffer, 0, copylength);
}
restore.flush();
restore.close();
restoredone = true;
bkp.close();
主な違いは、DBファイルを削除し、転送ではなく書き込みを使用することです。後で復元が成功したら、次の方法を使用してアプリを再起動します(やり過ぎかもしれませんが、私にとってはうまくいきます)。予測できない結果が得られる可能性があります(元のデータベースの一部はメモリ/キャッシュデータからアクセスされる可能性があります):-
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);