Detta är kärnkoden för en fungerande DB-återställning (från if (dbfile
.. i ett 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 största skillnaderna är att jag tar bort DB-filen och använder skrivningar snarare än överföringar. Senare och efter en lyckad återställning använder jag också följande för att starta om appen (kan vara överdrivet men det fungerar för mig) eftersom du kan få oförutsägbara resultat (jag tror att delar av den ursprungliga databasen kan nås från minne/cachad data):-
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
finish();
startActivity(i);
System.exit(0);