Đây là mã cốt lõi của khôi phục DB đang hoạt động (từ if (dbfile
.. trong một 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();
Sự khác biệt chính là tôi xóa tệp DB và sử dụng ghi thay vì chuyển. Sau đó và khi khôi phục thành công, tôi cũng sử dụng cách sau để khởi động lại Ứng dụng (có thể quá mức cần thiết nhưng nó phù hợp với tôi) vì bạn có thể nhận được kết quả không thể đoán trước (tôi nghĩ rằng các phần của cơ sở dữ liệu gốc có thể được truy cập từ bộ nhớ / dữ liệu được lưu trong bộ nhớ cache):-
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);