Cómo hacer una copia de seguridad de Realm DB en Android antes de eliminar el archivo Realm. ¿Hay alguna manera de restaurar el archivo de copia de seguridad?

Estoy trabajando en una aplicación de Android donde eliminaré el dominio antes de copiar los nuevos datos en Realm. ¿Hay alguna manera de que pueda tomar la copia de seguridad de los datos antes de eliminarlo y restaurarlo de nuevo si algo está mal al usar realm.copyToRealm ()?

Realm.writeCopyTo podría ser útil para este caso. Usted puede encontrar doc aquí.

 //Backup Realm orgRealm = Realm.getInstance(orgConfig); orgRealm.writeCopyTo(pathToBackup); orgRealm.close(); //Restore Realm.deleteRealm(orgConfig); Realm backupRealm = Realm.getInstance(backupConfig); backupRealm.writeCopyTo(pathToRestore); backupRealm.close(); orgRealm = Realm.getInstance(orgConfig); 

Pero en su caso, sería mucho más simple y rápido mover su archivo de Realm a un lugar de copia de seguridad, y moverlo de nuevo cuando desee restaurarlo. Para obtener la ruta del archivo Realm, pruebe:

 realm.getPath(); 

Este es un ejemplo de código para la copia de seguridad y restauración del db del reino.

 public class RealmMigration { private final static String TAG = RealmMigration.class.getName(); private Context context; private Realm realm; public RealmMigration(Context context) { this.realm = Realm.getInstance(BaseApplication.realmConfiguration); this.context = context; } public void backup() { File exportRealmFile = null; File exportRealmPATH = context.getExternalFilesDir(null); String exportRealmFileName = "default.realm"; Log.d(TAG, "Realm DB Path = "+realm.getPath()); try { // create a backup file exportRealmFile = new File(exportRealmPATH, exportRealmFileName); // if backup file already exists, delete it exportRealmFile.delete(); // copy current realm to backup file realm.writeCopyTo(exportRealmFile); } catch (IOException e) { e.printStackTrace(); } String msg = "File exported to Path: "+ context.getExternalFilesDir(null); Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); Log.d(TAG, msg); realm.close(); } public void restore() { //Restore File exportRealmPATH = context.getExternalFilesDir(null); String FileName = "default.realm"; String restoreFilePath = context.getExternalFilesDir(null) + "/"+FileName; Log.d(TAG, "oldFilePath = " + restoreFilePath); copyBundledRealmFile(restoreFilePath, FileName); Log.d(TAG, "Data restore is done"); } private String copyBundledRealmFile(String oldFilePath, String outFileName) { try { File file = new File(context.getFilesDir(), outFileName); Log.d(TAG, "context.getFilesDir() = " + context.getFilesDir().toString()); FileOutputStream outputStream = new FileOutputStream(file); FileInputStream inputStream = new FileInputStream(new File(oldFilePath)); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buf)) > 0) { outputStream.write(buf, 0, bytesRead); } outputStream.close(); return file.getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } return null; } private String dbPath(){ return realm.getPath(); } 

}

  • Resultados de Limit Realm
  • Utilice bases de datos pre-pobladas con Realm
  • Realm: Cómo consultar con campo muchos a muchos
  • Cómo truncar todas las tablas en el reino de Android
  • ¿Cómo comprobar el reino para la existencia de los datos del androide?
  • Realm ORM: cómo tratar con Maps?
  • Requisito de dominio con dos condiciones al mismo tiempo
  • Cómo cerrar el reino abierto por Realm.getDefaultInstance?
  • Implementar un formulario de consulta de unión en un db de dominio sin tener una relación predefinida en struture
  • El objeto no es parte del esquema para este reino
  • Clase de datos Kotlin de RealmObject
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.