Télécharger la base de données SQLite à partir d'Internet et de les charger dans l'application Android
Pour mon application android, je voudrais utiliser une base de données importante (environ 45 MO).
Une solution serait d'inclure l' (coupée en deux) de la base de données dans le dossier des actifs et les copier dans le répertoire de base de données lors du premier démarrage.
Mais cela consomme de l'espace disque deux fois - une fois dans les actifs dossier où le fichier ne peut être supprimé et une fois dans le répertoire de base de données où il a été copié.
Donc, je serais plutôt du genre à télécharger la base de données à partir d'Internet (serveur web) lors du premier démarrage. Comment pourrais-je faire cela? Puis-je télécharger une complète SQLite fichier et l'enregistrer dans le répertoire de base de données? Ou devrais-je plutôt aller avec JSON fichiers de données qui sont utilisés pour remplir la base de données?
Vous devez vous connecter pour publier un commentaire.
Il n'aurait pas à split, à seulement Zippée. Voir
SQLiteAssetHelper
pour un exemple.Utilisation
HttpUrlConnection
. Ou, utilisezHttpClient
.Oui. Utilisation
getDatabasePath()
pour obtenir le chemin d'accès local à utiliser.Vous le pouvez, mais pour 45 MO, ce serait horriblement lent.
SQLiteAssetHelper
semble intéressant, mais néanmoins, la taille maximum de l'actif est de 1 mo, n'est-ce pas? Donc, il n'a pas d'importance si le fichier est zippé ou non - c'est cette limite. De sorte que vous recommanderiez d'utiliser leSQLiteAssetHelper
ou le télécharger à partir d'un serveur web?aapt
. Vous pouvez avoir de plus grands biens que, tant queaapt
de ne pas les compresser, ce qui est pourquoiSQLiteAssetHelper
utilise un fichier ZIP. Vos arguments pour téléchargement à partir d'un serveur Web sont encore très valable (par exemple, double espace) -- j'étais simplement clarifier votre "coupée en deux" de référence, pour quelqu'un d'autre rencontre de cette question. BTW, vous pouvez également utiliserDownloadManager
pour télécharger la base de données, si vous pouvez alors le déplacer dans la position finale vous-même une fois téléchargés.SQLiteAssetHelper
pour copier et l'utiliser? Merciassets/
. Ce n'est pas pour le téléchargement d'un fichier de base de données.SQLiteAssetHelper
j'ai compressé d'une base de données(9 MO), sa taille jusqu'à (3 MO) -> mettre enAssets
mais la taille de l'application a augmenté (9 MO), et non par (3 MO), une idée?Ayant été demandé quelle est la solution que j'ai fini avec, voici le code que j'ai utilisé (à peu près). Il peut ne pas être complète, et de plus, il n'est pas élégant ou propre, soit. Mais peut-être cela peut vous aider.
MyActivity.java
Database.java
public de la classe de Base de données s'étend SQLiteOpenHelper {
}
Je pense que le JSON approche serait une meilleure idée si votre base de données est grand.
Je ne suis pas certaine à 100%, mais je crois que lorsque vous relâchez une mise à jour de votre application, votre appareil va télécharger l'intégralité de l'application. Si vous êtes le regroupement d'un 45 mo fichier avec votre application, cela signifie que chaque fois que vous appuyez sur une mise à jour, vos utilisateurs vont être coincé avec le téléchargement d'un 45 mo fichier. Pas une bonne idée.
Ce que vous pourriez faire est d'inclure la structure correcte de la base de données absence de données dans votre application. Lorsque l'utilisateur ouvre l'application, il peut se connecter à votre serveur web et d'obtenir les données JSON pour remplir la base de données. De cette façon, lorsque l'utilisateur met à jour votre application ne sera pas coincé avec le téléchargement d'un nouveau fichier de grande taille. Les mises à jour ne pas gommer les bases de données existantes.
Vous pourriez même choses de fantaisie et d'obtenir des pièces de la base de données via JSON jusqu'à ce que l'utilisateur a tout. De cette façon, si vous êtes en train de faire un monstre de la requête et ils perdent la connexion à l'internet, rien de mauvais va se passer.