Cuando ya tenemos una aplicación en producción y ocurre un problema causado por la base de datos suele ser complicado averiguar donde esta el problema, es buena idea tener una copia de la misma base de datos para ver exactamente que esta pasando.
Hace un tiempo que estaba buscando la manera de sacar un backup de la base de datos de una aplicación en Android, después de probar varias opciones encontré un segmento de código que sí ha funcionado:
public void backupdDatabase(){
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
String packageName = "com.yourapp.package";
String sourceDBName = "mydb.db";
String targetDBName = "mydb";
if (sd.canWrite()) {
Date now = new Date();
String currentDBPath = "data/" + packageName + "/databases/" + sourceDBName;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
String backupDBPath = targetDBName + dateFormat.format(now) + ".db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
Log.i("backup","backupDB=" + backupDB.getAbsolutePath());
Log.i("backup","sourceDB=" + currentDB.getAbsolutePath());
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
} catch (Exception e) {
Log.i("Backup", e.toString());
}
}
Ustedes ya se encargan de cambiar los valores y mostrar los mensajes de error.
Me olvidaba que necesitarán del permiso para escribir en la memoria SD:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Obtenido de: Stackoverflow