2010-11-25 6 views
2

J'ai une ressource Array chaîne qui a environ 1000 noms de médicamentsAndroid Development String Array Resource trop grand, écrasant Android App!

<string-array name="index"> 
<item>Aspirin</item> 
    <item>Levitra</item> 
    .... 
</string-array> 

j'ai essayé de charger ce tableau de chaînes dans une chaîne [] dans une activité. En utilisant la même syntaxe fournie par la documentation java de Google trouvée ici. http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

Resources res = getResources(); 
String[] drugs = res.getStringArray(R.array.index); 

Il semble ma chaîne de tableau a trop de dossiers et son entraînant mon application crash (pile débordement?) Lorsque je réduis la ressource chaîne de tableau à environ 506 dossiers, l'application fonctionne à nouveau, mais ajouter encore 1 élément de plus dans le tableau de bord ferait planter l'application.

Que dois-je faire? Je veux coder la logique pour filtrer et faire d'autres choses à la liste. Je n'ai pas de base de données SQL dans l'application, donc je ne peux pas faire le traitement dans la base de données. Existe-t-il un moyen de parcourir la ressource string-array sans la charger dans un String []? Je remarque que la ressource est un pointeur. Ou existe-t-il une structure de données alternative ou une approche qui fonctionnerait?

Merci,

+0

"J'ai une ressource de chaîne de caractères qui compte environ 1000 noms de médicaments" - pourquoi? Quelle valeur obtenez-vous d'un tableau de chaînes qui ne peut pas être rencontré par une ressource XML ordinaire? – CommonsWare

+0

@CommonsWare Merci, bravo! J'utilise une ressource string-array car c'est la manière préférée que les propres tutoriels de Google utilisent pour charger une liste d'enregistrements dans un ListView. Tout fonctionne génial quand j'ai tous les dossiers décomposés par leur Alphabet de départ. Maintenant, j'essaie d'implémenter une fonction de recherche, donc idéalement je voudrais parcourir tous les enregistrements à la fois au lieu de faire une boucle pour chaque Alphabet de départ. Je ne suis pas familier avec l'architecture d'allocation de mémoire dans Android, mais je suis un peu surpris que le chargement de 506 enregistrements dans un String [] plante l'application: p – Mashsensor

+0

Il serait génial s'il y a un moyen de parcourir une ressource tableau dans R.arrays sans le charger par valeur dans une structure de données d'abord ...: D, Ou peut-être un vecteur ou une liste liée pourrait-il contenir plus de données? Peut-être que j'ai juste besoin de créer un db SQLite et de le gérer là, ou juste finir par itérer à travers les 26 Alphabets dans ma méthode de recherche. Happy Thanksgiving btw – Mashsensor

Répondre

1

Y at-il une raison pour laquelle vous ne souhaitez pas utiliser une base de données SQL? Je recommande fortement de mettre en place une base de données SQLite. Les tableaux de chaînes n'ont pas été conçus pour des données de cette taille. Votre application sera lente et consommera beaucoup de mémoire. La seule alternative que je pourrais envisager serait d'utiliser des chaînes individuelles et avoir un tableau de valeurs d'identification de chaîne - cela devrait fonctionner.

+0

Merci pour la réponse! J'irais certainement avec l'option de stocker l'enregistrement dans un DB de SQLite s'il n'y a aucune autre alternative. Je me demandais simplement s'il existait un moyen d'itérer à travers une ressource de type tableau via un pointeur ou quelque chose comme ça et de ne pas avoir à charger tout le tableau de chaînes dans un String []. – Mashsensor

+0

Vous pouvez utiliser 'Resource.openRawResource', mais FWIK le format n'est pas documenté, et en tant que tel, vous ne devriez pas essayer de l'analyser. Vraiment, avoir des chaînes individuelles peut être le meilleur pari. Cela, ou simplement créer votre propre format de ressource (binaire?) Et le stocker comme une ressource brute. – EboMike

+0

Je vais certainement essayer SQLite .. Il vous donnera beaucoup de fonctionnalités utiles si vous voulez trier des médicaments, rechercher des médicaments, etc. – Snailer