2010-06-10 6 views
6

Mi pregunta es bastante simple, pero no creo que la respuesta sea ... Tengo bastante contenido para tener en mi aplicación para hacer que funcione correctamente, y estoy pensando en poner todo en una base de datos, y distribuirlo en una base de datos incrustada con la aplicación en el mercado. El único problema es que no tengo idea de cómo hacerlo. Sé que puedo extraer un archivo .db de Eclipse DDMS con el contenido de mi base de datos, y supongo que tengo que ponerlo en la carpeta de activos de mi aplicación, pero luego cómo hacer que la aplicación lo use para regenerar la aplicación ¿base de datos? Si tiene algún enlace a algún código o ayuda, sería genial. Gracias Incruste una base de datos en el .apk de una aplicación distribuida [Android]

Respuesta

12

bien para lograr lo que preguntas, se puede poner el archivo .db en su activos/directorio y copiarlo en su lugar la primera vez que inicie su aplicación .....

final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db"; 

// Check if the database exists before copying 
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists(); 
if (initialiseDatabase == false) { 

    // Open the .db file in your assets directory 
    InputStream is = getContext().getAssets().open("MyDatabaseFile.db"); 

    // Copy the database into the destination 
    OutputStream os = new FileOutputStream(DB_DESTINATION); 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = is.read(buffer)) > 0){ 
     os.write(buffer, 0, length); 
    } 
    os.flush(); 

    os.close(); 
    is.close(); 
} 

Donde "initialiseDatabase" es una bandera que indica si la aplicación se ha lanzado por primera vez.

Aunque, si está buscando almacenar una gran cantidad de datos, como mencionó: le recomiendo evitar que hinche el archivo APK con él, y use la conexión a Internet para descargar los registros de la base de datos (desde un servidor alojado) después la aplicación ha sido lanzada De esta forma, puede mostrar una barra de progreso que le indica al usuario por qué están esperando mucho tiempo para comenzar a usar la aplicación. Hacer el APK especialmente grande por lo general disuade a las personas de instalarlo en primer lugar.

+0

Bueno, antes estaba usando una barra de progreso, pero como estoy descargando muchas imágenes y analizando varios XML , toma bastante tiempo, especialmente cuando usa la red 3G en lugar de wifi – Sephy

+0

¿no sería más fácil simplemente verificar si la base de datos ya existe en lugar de usar el booleano? ¿Cómo puedo realizar un seguimiento del booleano cuando se cierra la aplicación? entrada en el DB? – Sephy

+0

Eso es exactamente lo que representa el booleano, lo dejé como un ejercicio de implementación. He actualizado el código de ejemplo con la forma en que puede hacerlo. – seanhodges

1

Puede implementar una solución a mitad de camino: utilice el enfoque anterior, pero en lugar de distribuir el archivo db, colóquelo en el servidor en alguna parte. En mi experiencia, obtener archivos es solo el 10% del tiempo de procesamiento, el resto es analizar y serializar imágenes a db

+0

En realidad, mi propósito era evitar ponerlo en un servidor y forzar una descarga directamente después de la instalación de la aplicación ... – Sephy

+0

Entiendo. Lo estaba considerando para mi aplicación, pero luego miré el tamaño db y es otro + 350K. La gente se puso muy sensible al respecto, sin embargo, si tienes una conexión decente, definitivamente será más rápido que la descarga gradual con el procesamiento posterior – Bostone

Cuestiones relacionadas