2010-11-26 11 views
3

SAXParserを使用して大きなXMLファイルを解析しようとすると、アプリケーションがクラッシュします。
SOに関する質問が見つかりましたhere未回答です。
XMLのサイズを小さくすると、意図したとおりに動作しています
ここに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私は、アンドロイドのためのヒープの制限があります

+0

データ用にXMLファイルではなくSQLiteデータベースを使用する方法はありますか? – EboMike

+0

私はXMLファイルを解析し、S​​qliteDBのメイトに保存します。 – r3dsm0k3

+3

解析自体が原因であるか、リストのリストに格納するのが単純に大きすぎるかどうかはわかりません。後者の場合は、リストに格納するのではなく、直接sqlite DBにデータをプッシュしようとします。あまり効率的ではないかもしれませんが、膨大な数のレコードがあれば、より良い解決策かもしれません。または20-30のエントリをキャッシュしてDBにフラッシュし、リストをクリアして別のキャッシュに保存します。20-30 – Tseng

答えて

1

を解析し、ファイルからチャンクでXMLデータを読み込み、便利それを解析するために使用しているコード

忍者編集です:

Tsengとして:List<DbEntry>を読み込むと、20-30件のエントリが読み込まれます。

関連する問題