2012-08-08 24 views
5

Mi aplicación utiliza el patrón SyncAdapter, que contiene credenciales de usuario con AccountManager y ContentProvider para almacenar datos en una base de datos.Eliminación de la base de datos cuando se elimina una cuenta

Cuando se elimina el account puedo eliminar el db utilizando el método explicado en this question. El db se elimina al hacer:

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

Esto funciona bien, pero cuando lo hago de nuevo, todo sigue allí. Parece que el ContentProvider no sabe que el db ha sido eliminado.

En this answer, inazaruk dice:

usted necesita para asegurarse de que ha matado al proceso que aloja ContentProvider que utiliza ese archivo de base de datos específica. Y solo después de elimínelo.

Eliminar el proceso para borrar un db no parece correcto.

¿Hay algo mejor que hacer?

+0

¿Por qué eliminar el archivo de base de datos? ¿No es suficiente eliminar los datos de la base de datos? – zapl

+0

@zapl: Sí. Podría hacer algo como 'eliminar de la tabla;' – Macarse

Respuesta

2

Si hubiera tenido que hacer eso me gustaría probarlo de la siguiente manera:

añadir un poco de Uri que al insertar o eliminar el uso que desencadena Uri eliminación de base de datos dentro de su ContentProvider. Al eliminar, borre todas las referencias al SQLiteDatabase, ya que es posible que todavía pueda acceder al archivo de base de datos anterior a través de eso (si elimina un archivo en Linux y lo tiene abierto, puede usarlo; ya no se puede acceder a través de el camino).

Al colocar la eliminación dentro del ContentProvider, debe poder cerrar la conexión de la base de datos y rastrear el estado de eliminación de manera que sepa que debe volver a crear el archivo de base de datos.

ContentProviders no dejar de fumar a menos que mata a su aplicación por lo que es probable que tenga la misma instancia en ejecución y, probablemente, las referencias al archivo de edad como se mencionó anteriormente

Cuestiones relacionadas