Dette er kernekoden for en fungerende DB-gendannelse (fra if (dbfile
.. i et 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 vigtigste forskelle er, at jeg sletter DB-filen og bruger skrivning frem for overførsler. Senere og efter en vellykket gendannelse bruger jeg også følgende til at genstarte appen (kan være overkill, men det virker for mig), da du kan få uforudsigelige resultater (jeg tror, at dele af den originale database kan tilgås fra hukommelse/cachedata):-
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);