2012-08-08 15 views
5

La mia app utilizza lo schema SyncAdapter, contenente le credenziali dell'utente utilizzando lo AccountManager e un ContentProvider per memorizzare i dati in un db.Eliminazione del database quando si rimuove un account

Quando viene rimosso il numero account, è possibile rimuovere il db utilizzando l'approccio spiegato in this question. Il db viene rimosso facendo:

boolean deleted = mContext.deleteDatabase(DatabaseHelper.DATABASE_NAME); 

Questo funziona bene, ma quando lo faccio di nuovo il login tutto è ancora lì. Sembra che lo ContentProvider non sappia che il db è stato rimosso.

In this answer, inazaruk dice:

È necessario assicurarsi di aver ucciso il processo che ospita ContentProvider che utilizza il file di database specifico. E solo lo cancellarlo.

Uccidere il processo per cancellare un db non sembra giusto.

C'è una cosa migliore da fare?

+0

Perché cancellare il file di database? Non è sufficiente rimuovere i dati dal database? – zapl

+0

@zapl: Sì. Potrei fare qualcosa come 'delete from table;' – Macarse

risposta

2

Se avessi avuto a che fare che avrei provare seguente modo:

aggiungere un po 'Uri che quando si inserisce o si elimina utilizzando tale Uri innesca la cancellazione del database all'interno del vostro ContentProvider. Quando cancelli cancella anche tutti i riferimenti allo SQLiteDatabase dato che è possibile che tu possa ancora accedere al vecchio file di database attraverso quello (Se elimini un file in Linux e hai quel file aperto puoi ancora usarlo - non è più accessibile via il sentiero).

Inserendo la cancellazione all'interno dello ContentProvider, si dovrebbe essere in grado di chiudere la connessione al database e tracciare lo stato di eliminazione in modo che si sappia che è necessario ricreare il file del database.

ContentProviders non uscire a meno che non si uccide la vostra applicazione in modo probabilmente si ha la stessa istanza in esecuzione e, probabilmente, i riferimenti al vecchio file come detto sopra

Problemi correlati