2010-06-10 12 views
6

Ma question est je pense assez simple mais je ne pense pas que la réponse sera ... J'ai beaucoup de contenu à avoir dans mon application pour le faire fonctionner correctement, et je pense à tout mettre dans une base de données, et le distribuer dans une base de données intégrée avec l'application sur le marché. Le seul problème est que je n'ai aucune idée de comment faire cela. Je sais que je peux extraire un fichier .db d'Eclipse DDMS avec le contenu de ma base de données, et je suppose que je dois le mettre dans le dossier des actifs de mon application, mais ensuite comment l'utiliser pour régénérer l'application base de données? Si vous avez un lien vers un code ou de l'aide, ce serait génial. MerciIncorporer une base de données dans le .apk d'une application distribuée [Android]

Répondre

12

Eh bien, pour obtenir ce que vous demandez, vous pouvez mettre le fichier .db dans votre actif/et copiez-le en place la première fois que vous démarrez votre application .....

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(); 
} 

Où "initialiseDatabase" est un indicateur indiquant si l'application a été lancée pour la première fois. Bien que, si vous envisagez de stocker beaucoup de données, comme vous l'avez mentionné: Je vous recommande fortement d'éviter de gonfler le fichier APK avec, et d'utiliser la connexion Internet pour télécharger les enregistrements de base de données (à partir d'un serveur hébergé) après l'application a été lancée. De cette façon, vous pouvez afficher une barre de progression indiquant à l'utilisateur pourquoi il attend depuis longtemps pour commencer à utiliser l'application. Rendre le fichier APK particulièrement volumineux décourage généralement les utilisateurs de l'installer en premier lieu.

+0

Eh bien, j'utilisais auparavant une barre de progression, mais en téléchargeant beaucoup d'images, et en analysant plusieurs XML , il faut beaucoup de temps, surtout lorsque vous utilisez le réseau 3G au lieu de wifi – Sephy

+0

ne serait-il pas plus facile de vérifier simplement si la base de données existe déjà au lieu d'utiliser le booléen? Comment garder une trace du booléen lorsque l'application est arrêtée? entrée dans la DB? – Sephy

+0

C'est exactement ce que représente le booléen, je l'ai laissé comme exercice de mise en œuvre. J'ai mis à jour le code d'exemple avec la façon dont vous pourriez vous y prendre. – seanhodges

1

Vous pouvez implémenter une solution moyenne: Utilisez l'approche ci-dessus, mais au lieu de distribuer le fichier db, placez-le sur un serveur quelque part. D'après mon expérience, l'obtention de fichiers ne représente que 10% du temps de traitement, le reste est l'analyse et la sérialisation des images en db.

+0

En fait mon but était d'éviter de le mettre sur un serveur et de forcer un téléchargement directement après l'installation de l'application ... – Sephy

+0

Je comprends. Je le considérais pour mon application mais ensuite j'ai regardé la taille db et son autre + 350K. Les gens se sont mis en colère à ce sujet, mais si vous avez une connexion décente, il sera certainement plus rapide que le téléchargement fragmenté avec un traitement ultérieur – Bostone