Dit is de kerncode van een werkend DB-herstel (van if (dbfile
.. in een 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();
De belangrijkste verschillen zijn dat ik het DB-bestand verwijder en schrijfbewerkingen gebruik in plaats van overdrachten. Later en bij een succesvol herstel gebruik ik ook het volgende om de app opnieuw te starten (misschien overdreven, maar het werkt voor mij) omdat je onvoorspelbare resultaten kunt krijgen (ik denk dat delen van de originele database toegankelijk zijn vanuit het geheugen / gegevens in de cache):-
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);