/ データを渡す/ KSOAP2 OutOfMemory - アンドロイド、ksoap2

KSOAP2 OutOfMemoryは大きなデータを渡す - android、ksoap2

http://pastebin.com/ntp3hi7j

上記のコードでは、 "Limit = 5/10"のように、ダウンロードできるデータはほとんどありませんが、 "Limit = 50"をダウンロードしようとすると、次のようなエラーメッセージが表示されます。

> 10-02 06:44:28.075: E/AndroidRuntime(27598): FATAL EXCEPTION:
> pool-1-thread-1 10-02 06:44:28.075: E/AndroidRuntime(27598):
> java.lang.OutOfMemoryError 10-02 06:44:28.075:
> E/AndroidRuntime(27598):  at
> java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> java.lang.StringBuilder.append(StringBuilder.java:271) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1338) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.kxml2.io.KXmlParser.next(KXmlParser.java:390) 10-02 06:44:28.075:
> E/AndroidRuntime(27598):  at
> org.kxml2.io.KXmlParser.next(KXmlParser.java:310) 10-02 06:44:28.075:
> E/AndroidRuntime(27598):  at
> org.kxml2.io.KXmlParser.nextText(KXmlParser.java:2056) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.ksoap2.serialization.DM.readInstance(DM.java:35) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.ksoap2.serialization.SoapSerializationEnvelope.readInstance(SoapSerializationEnvelope.java:428)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:387)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:273)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:389)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:151)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.ksoap2.transport.Transport.parseResponse(Transport.java:118) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:253)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> com.example.inforlider.SyncActivity$4.run(SyncActivity.java:189) 10-02
> 06:44:28.075: E/AndroidRuntime(27598):    at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
> 10-02 06:44:28.075: E/AndroidRuntime(27598):  at
> java.lang.Thread.run(Thread.java:841)

おそらく問題の1つは、それがBLOBであり、非常に大きな文字列を返すので、フィールド "Image"が原因である可能性があります。

私に何ができる?ありがとう。

回答:

回答№1は0

あなたのせっけんのxmlを取得して電話の記憶装置に保存してから、それを解析します。 xmlがメモリに保存されているときには解析しないでください。

あなたはこれを参照することができます: サーバーからXMLファイルをダウンロードしてSDカードに保存する方法?


回答№2の場合は0

関数にBLOB(ビッグデータ)が含まれているため、フィールド "Image"を含まないようにして問題を解決しました。以前は、フィールド "Image"を読み取るためだけに別の関数を作成しました。