2010-11-25 8 views
2

Ich habe ein String-Array-Ressource, die etwa 1000 MedikamentennamenAndroid Development String Array Ressource zu groß, Absturz Android App!

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

ich diesen String-Array in einen String [Inneren einer Aktivität] zu laden versucht hat. Verwenden Sie die gleiche Syntax wie in der Java-Dokumentation von Google, die Sie hier finden. http://developer.android.com/guide/topics/resources/string-resource.html#StringArray

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

Es scheint, meine String-Array zu viele Datensätze hat und sein verursachen meine App (Stack-Überlauf?) Zum Absturz bringen, wenn ich die String-Array-Ressource über 506 Datensätze zu reduzieren, arbeitet die App erneut, Aber das Hinzufügen von noch einem weiteren Element im String-Array würde die App zum Absturz bringen.

Was soll ich tun? Ich möchte Logik codieren, um zu filtern und andere Sachen zur Liste zu machen. Ich habe keine SQL-Datenbank in der App, so kann ich nicht die Verarbeitung in der DB tun. Gibt es eine Möglichkeit, die String-Array-Ressource zu durchlaufen, ohne sie in einen String [] zu laden? Ich bemerke, dass die Ressource ein Zeiger ist. Oder gibt es eine alternative Datenstruktur oder Vorgehensweise, die funktionieren würde?

Danke,

+0

"Ich habe eine String Array Ressource, die etwa 1000 Droge Namen hat" - warum? Welchen Wert erhalten Sie aus einem String-Array, das von einer normalen XML-Ressource nicht erreicht werden konnte? – CommonsWare

+0

@CommonsWare Danke, Prost! Ich verwende eine String-Array-Ressource, da dies die bevorzugte Methode ist, mit der Google-Tutorials eine Liste von Datensätzen in ein ListView laden. Alles funktioniert super, wenn ich alle Datensätze nach dem Alphabet sortiert habe. Jetzt versuche ich, eine Suchfunktion zu implementieren, also würde ich idealerweise alle Datensätze gleichzeitig durchlaufen wollen, anstatt für jedes Start-Alphabet eine Schleife zu machen. Ich bin nicht vertraut mit Speicherzuweisungsarchitektur in Android, aber ich bin ein wenig überrascht, dass das Laden von 506 Datensätze in einen String [] die App zum Absturz bringen würde: p – Mashsensor

+0

Es wäre toll, wenn es eine Möglichkeit gibt, eine String-Array-Ressource zu durchlaufen in R.arrays, ohne sie zuerst wertmäßig in eine Datenstruktur zu laden ...: D, Oder könnte ein Vektor oder eine verknüpfte Liste mehr Daten enthalten? Vielleicht muss ich nur eine SQLite-Datenbank erstellen und sie dort behandeln oder am Ende alle 26 Alphabete in meiner Suchmethode durchlaufen. Happy Thanksgiving BTW – Mashsensor

Antwort

1

Gibt es einen Grund, warum Sie nicht wollen, eine SQL-Datenbank verwenden? Ich empfehle dringend, eine SQLite-Datenbank einzurichten. String-Arrays wurden nicht für Daten dieser Größe entworfen. Ihre App wird langsam und verbraucht viel Speicherplatz.

Die einzige Alternative, die ich mir vorstellen könnte, wäre die Verwendung einzelner Strings und eine Reihe von String ID-Werten - das sollte funktionieren.

+0

Danke für die Antwort! Ich würde sicherlich mit der Option gehen, den Datensatz in einer SQLite-Datenbank zu speichern, wenn es keine anderen Alternativen gibt. Ich habe mich nur gefragt, ob es eine Möglichkeit gibt, eine String-Array-Ressource per Zeiger oder ähnlichem zu durchlaufen und nicht das gesamte String-Array in einen String [] zu laden. – Mashsensor

+0

Sie können 'Resource.openRawResource' verwenden, aber FWIK das Format ist nicht dokumentiert, und als solches sollten Sie nicht versuchen, es zu analysieren. Wirklich, individuelle Saiten zu haben, kann die bessere Wette sein. Oder erstellen Sie einfach Ihr eigenes (binäres?) Ressourcenformat und speichern Sie es als rohe Ressource. – EboMike

+0

Ich würde definitiv SQLite versuchen .. Es wird Ihnen eine Menge nützlicher Funktionen geben, wenn Sie Drogen sortieren wollen, Drogen suchen, etc. – Snailer