Se abren varias bases de datos de Android

Estoy haciendo un cliente de mensajería instantánea para Android y estoy trabajando con bases de datos para almacenar los contactos y otras informaciones … En mi aplicación tengo una actividad y un servicio. Necesito abrir tres bases de datos en el mismo tiempo, tanto en el servicio como en la actividad.

Utilizo tres bases de datos porque quiero que las bases de datos se gestionen más fácilmente sin tener problemas con la sincronización de la escritura en ellos. (Por lo que sé que tengo que escribir en la base de datos sincrónicamente porque puede aplastar).

Para gestionar las bases de datos del servicio y de la actividad en el mismo tiempo, pensé que un singleton o una clase estática de DatabaseHelper podría ayudarme …

Así que he empezado a hacer una prueba haciendo dos objetos globales de base de datos en la actividad, cada uno abre una base de datos diferente, después de ejecutar el proyecto he notado que la última base abierta permanece abierta en ambos objetos: ((¿por qué es esto ¿sucediendo?

¿Puede alguien sugest me cómo puedo hacer este trabajo? ¡Gracias!

LE: después de más pruebas, hice un objeto estático de databasehelper, abrir un servicio del cual tomo el objeto de la base de datos de la actividad y al mismo tiempo hice dos para las sentencias, una en actividad y una en servicio que se ejecutan de 0 a 3000 Y agrega algunos valores a la misma base de datos y luego lee la base de datos.

Después de esta ejecución me di cuenta de que la base de datos está todavía en pies y corriendo sin errores. Lo extraño es que el servicio para se ejecuta sólo después de la actividad para terminar el trabajo. ¿Porqué es eso? ¡Gracias!

Tengo una clase DatabaseAdapter que contiene dos bases de datos que se abren juntos.

public class DatabaseAdapter { /** Identifier for the internal database */ public static final int INTERNAL = 0; /** Identifier for the external database */ public static final int EXTERNAL = 1; private final SQLiteOpenHelper[] mDatabaseManager = new SQLiteOpenHelper[2]; private final SQLiteDatabase[] mDatabases = new SQLiteDatabase[2]; /** * Constructs the database and open it. */ public DatabaseAdapter() { // Open the internal_db mDatabaseManager[INTERNAL] = new InternalDatabaseManager(MyApplication.getInstance()); mDatabases[INTERNAL] = mDatabaseManager[INTERNAL].getWritableDatabase(); } /** * Checks the database state and throws an {@link IllegalStateException} if database isn't open. * Should always be used before starting to access the database. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void checkDbState(int type) { if (mDatabases[type] == null || !mDatabases[type].isOpen()) { throw new IllegalStateException("The database has not been opened"); } } /** * Closes the database of the given type. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void close(int type) { if (mDatabases[type].isOpen()) { mDatabases[type].close(); mDatabases[type] = null; if (mDatabaseManager[type] != null) { mDatabaseManager[type].close(); mDatabaseManager[type] = null; } } } /** * @param type Type of the database. Can be INTERNAL or EXTERNAL. * @return true if the database is open, false otherwise. */ public boolean isOpen(int type) { return mDatabases[type] != null && mDatabases[type].isOpen(); } /** * Opens the default database. * * @param type Type of the database. Can be INTERNAL or EXTERNAL. */ public void open(int type) { switch (type) { case INTERNAL: mDatabaseManager[INTERNAL] = new InternalDatabaseManager(MyApplication.getInstance()); if (!isOpen(INTERNAL)) { mDatabases[INTERNAL] = mDatabaseManager[INTERNAL].getWritableDatabase(); } break; case EXTERNAL: mDatabaseManager[EXTERNAL] = new ExternalDatabaseManager(MyApplication.getInstance(), Constants.EXTERNAL_DB_PATH, 1); if (!isOpen(EXTERNAL)) { mDatabases[EXTERNAL] = mDatabaseManager[EXTERNAL].getWritableDatabase(); } break; } } } 

Añadir un tercero debería ser fácil 🙂

  • SQLiteDatabase.openDatabase vs SQLiteOpenHelper.getReadableDatabase
  • Error de SQLIte de Android: No se pudo leer la fila 0, col 1 de CursorWindow
  • Cómo implementar Exportar sqlite Para sobresalir / archivo csv en android?
  • Android permiso de creación de base de datos
  • AUTOINCREMENT sólo está permitido en un INTEGER PRIMARY KEY - android
  • Obtener ID de fila de una tabla SQLite FTS3
  • Android cursor cómo obtener valores nulos de columnas
  • Usando la función strftime de sqlite en android
  • SQLiteException: Token no reconocido al leer de la base de datos
  • Almacenamiento en caché de los datos descargados de JSON en la base de datos SQLite - ¿es una buena idea?
  • sqlite Android - cómo obtener el valor de col / fila específica
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.