2010-12-08 8 views
0

J'essaye de construire l'application de dictionnaire (en fait c'est une modification d'échantillon google SearchableDictionary), dont la source de mots et leurs définitions est très grande, environ 5MB. J'ai essayé de nombreuses façons et en utilisant de nombreux formats et il ne peut toujours pas fonctionner correctement sur Android. La base de données Sqlite devrait être la meilleure solution, je l'ai construite et sa taille est de 10 Mo (j'ai essayé de la construire avant l'exécution et pendant l'exécution). Le principal problème est la taille des définitions, mais j'ai vu d'autres applications ont réussi à le faire. Il se peut qu'il y ait quelques limites de taille de fichier intégrées dans le système Android, mais de toute façon, si elles ne sont pas tout cela prend autant de recherches et d'exécuter des requêtes dans cette base de données sqlite.grande base de données sqlite dans l'application android

Qu'est-ce que je fais mal? BTW: Il doit être hors ligne dictionnaire (définitions de téléchargement max 1 fois).

problème en quelques mots:

word -definition 
word2 -definition2... 

stockées dans une base de données SQLite 10MB (essayé le chargement des actifs), ne fonctionne pas. Avec certains hacks (chargement manuel avec l'outil eclipse DDMS), cela fonctionne mais terriblement lentement.

+0

Comment avez-vous essayé de le charger des actifs? Où est le code? Où est la sortie logcat quand elle échoue? – Cristian

Répondre

2

Chargez-vous la base de données à partir du dossier Assets? Si oui, alors c'est votre problème. Il y a une limite de taille de fichier sur ce qui est dans le dossier des assets (1mb je crois).

Vous avez deux options:

  1. Split up your database into multiple 1mb files
  2. Créez un webservice. Demandez à votre application d'appeler le service Web qui télécharge à son tour la base de données sur votre appareil Android. OU créez une API webservice que votre application utilise pour obtenir des données en fonction de ses besoins.
+0

Le téléchargement de la base de données ou de son contenu lors de l'installation semble bon, car vous ne gaspillerez pas d'espace sur l'appareil avec une copie livrée dans le fichier .apk plus la copie de travail, mais seulement la copie de travail. Mais bien sûr, vous avez besoin d'un serveur Web pour le télécharger, vous ne pouvez plus utiliser le marché android. –

0

Avez-vous essayé de compresser le fichier? Si les données ne sont que du texte brut, je parie que la compression sera inférieure à 1 Mo.

+0

Comment compresser le fichier et comment cela peut-il aider? Cela ne fait que réduire la taille du paquet, mais je dois l'utiliser non compressé pour pouvoir rechercher des définitions. – stratocaster

+0

Vous le compressez, le mettez dans des actifs, puis lorsque votre application est installée, décompressez-la et placez-la dans le répertoire DB. – JRL

1

Renommez-le en quelque chose comme "databasename.mp3" ou n'importe quel format de média. Il ne sera pas compressé par le gestionnaire de paquets et vous pouvez donc l'utiliser comme vous le souhaitez.

0

1) Stockez une version compressée de seulement mots en utilisant le GZIP. (Ce sera très faible seulement 350k, et doit être pré-trié)

2) Chargez la liste en:

new ArrayList<String>(); 

3) Utilisez un binarySearch pour trouver le mot

.binarySearch 

4) Lorsque vous avez besoin d'une définition, appelez une API comme celui-ci avec le mot

http://services.aonaware.com//DictService/DictService.asmx/Define?word=aardvark

5) analyser le résultat XML

0

Le fichier 10M est beaucoup trop petit pour ne pas s'inquiéter.Cela n'a pas fonctionné, cela pourrait être dû à la manière d'ouvrir le fichier de base de données. Par défaut, Android lit le fichier de base de données à partir de: // data/data/PACKAGENAME/databases/DATABASENAME.

Une solution simple pourrait être: 1) compresser le fichier db en res/raw/DATABASE.zip, 2) puis le décompresser en // data/data/PACKAGENAME/databases /.

Vous pouvez obtenir sqlite code Android de démonstration d'ici: http://www.cs.dartmouth.edu/~campbell/cs65/lecture15/lecture15.html

Questions connexes