2010-11-26 28 views
3

Mon application plante lorsque vous tentez d'analyser un fichier XML volumineux à l'aide de SAXParser. J'ai trouvé une question dans SO concernant here sans réponse.
Cela fonctionne comme prévu quand je réduis la taille du XML
Voici ma sortie LogCat.Android OutOfMemoryError

11-26 12:08:45.099: WARN/dalvikvm(218): threadid=17: thread exiting with uncaught exception (group=0x4001aa28) 
11-26 12:08:45.109: ERROR/AndroidRuntime(218): Uncaught handler: thread Thread-9 exiting due to uncaught exception 
11-26 12:08:45.220: ERROR/AndroidRuntime(218): java.lang.OutOfMemoryError 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at java.lang.Object.internalClone(Native Method) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at java.lang.Object.clone(Object.java:82) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:141) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at java.lang.StringBuilder.append(StringBuilder.java:282) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at com.google.android.iopex.SaxXMLHandler.characters(SaxXMLHandler.java:24) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:166) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatParser.append(Native Method) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:506) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:467) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:329) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:286) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at javax.xml.parsers.SAXParser.parse(SAXParser.java:361) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at javax.xml.parsers.SAXParser.parse(SAXParser.java:240) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at com.google.android.iopex.SaxParser.parse(SaxParser.java:22) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at com.google.android.iopex.iOPEXActivity$4.run(iOPEXActivity.java:112) 
11-26 12:08:45.220: ERROR/AndroidRuntime(218):  at java.lang.Thread.run(Thread.java:1060) 

HERE est le code que j'utilise pour analyser

+0

Est-il possible d'utiliser une base de données SQLite plutôt qu'un fichier XML pour vos données? – EboMike

+0

Im analyser les fichiers XML et le stocker dans SqliteDB mate.! – r3dsm0k3

+3

Je ne suis pas sûr si l'analyse lui-même est à l'origine ou le stockage dans la liste Liste devient simplement trop grand. Si ce dernier, essayez de pousser directement les données à la DB sqlite au lieu de le stocker dans la liste . Peut-être moins efficace, mais avec un grand nombre d'enregistrements peut-être une meilleure solution. Ou cache 20-30 entrées et les rincer dans la DB, effacer la liste et mettre en cache un autre 20-30 – Tseng

Répondre

1

Il y a des restrictions de tas pour Android, lire les données XML dans des morceaux de votre fichier et l'analyser facilement

modifier Ninja:

Selon Tseng: La mise en cache List<DbEntry> en lisant 20-30 entrées dans cela a beaucoup plus de sens.