2015-07-01 13 views

risposta

12

Realm.writeCopyTo potrebbe essere utile per questo caso. Puoi trovare doc qui.

//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); 

Ma nel tuo caso, sarebbe molto più semplice e veloce per spostare appena il file Reame ad un posto per il backup, e spostarlo indietro quando si vuole ripristinarla. Per ottenere il percorso del file Reame, provare:

realm.getPath(); 
6

Questo è il codice di esempio per il backup regno db & ripristino.

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(); 
} 

}

+0

così utile !! Grazie! –

Problemi correlati