2015-12-24 11 views
5

Come cancellare il database di realm predefinito in Android? Ho provato a seguire il codice ma non posso risolvere il metodo deleteRealmFile.Database predefinito di Realm Android clear

Metodo 1:

try { 
    Realm.deleteRealmFile(context); 
    //Realm file has been deleted. 

} catch (Exception ex){ 
    ex.printStackTrace(); 
    //No Realm file to remove. 
} 

ho cercato di eliminare utilizzando la configurazione.

Metodo 2:

try { 
    Realm.deleteRealm(realm.getConfiguration()); 
    //Realm file has been deleted. 
} catch (Exception ex){ 
    ex.printStackTrace(); 
    //No Realm file to remove. 
} 

ma è dà l'errore:

java.lang.IllegalStateException: It's not allowed to delete the file associated with an open Realm. Remember to close() all the instances of the Realm before deleting its file. 

risposta

2

Come l'eccezione descritta, è necessario chiudere tutte le istanze Realm, che fanno riferimento al file regno specifica.

Questo significa che, se si è chiamati

Realm realm = Realm.getInstance(config);

Dovete chiudere il Regno prima di eliminarlo.

realm.close();

E le istanze Realm si basano su contatore di riferimento, in modo da assicurarsi ogni getInstance ha un abbinato close.

Questo è molto importante, altrimenti potrebbe verificarsi una perdita di memoria. Vedere https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances per alcuni esempi.

6

Prima Realm.deleteRealm(realm.getConfiguration()); basta aggiungere realm.close() come qui di seguito e funziona come un fascino

try { 
     realm.close() 
     Realm.deleteRealm(realm.getConfiguration()); 
       //Realm file has been deleted. 
} catch (Exception ex){ 
       ex.printStackTrace(); 
       //No Realm file to remove. 
} 
+1

questo non funziona non funziona, gettando java.lang.IllegalStateException: Non è consentito di eliminare il file associato ad un Reame aperta. Ricorda di chiudere() tutte le istanze del Realm prima di eliminare il suo file. – shekar