2017-03-28 17 views
0

私のアプリケーションでは、デバイスにキャッシュデータを実装してオフラインモードで表示しようとしています。それは前にうまく動作しますが、今私はこのクラッシュを取得します。
android java lang abstractstringbuilder enlargebuffer out of memoryエラー

Fatal Exception: java.lang.OutOfMemoryError 
    at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94) 
    at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:132) 
    at java.lang.StringBuilder.append(StringBuilder.java:124) 
    at org.json.JSONStringer.string(JSONStringer.java:344) 
    at org.json.JSONStringer.value(JSONStringer.java:252) 
    at org.json.JSONObject.writeTo(JSONObject.java:672) 
    at org.json.JSONStringer.value(JSONStringer.java:237) 
    at org.json.JSONObject.writeTo(JSONObject.java:672) 
    at org.json.JSONStringer.value(JSONStringer.java:237) 
    at org.json.JSONObject.writeTo(JSONObject.java:672) 
    at org.json.JSONStringer.value(JSONStringer.java:237) 
    at org.json.JSONObject.writeTo(JSONObject.java:672) 
    at org.json.JSONStringer.value(JSONStringer.java:237) 
    at org.json.JSONArray.writeTo(JSONArray.java:602) 
    at org.json.JSONStringer.value(JSONStringer.java:233) 
    at org.json.JSONObject.writeTo(JSONObject.java:672) 
    at org.json.JSONObject.toString(JSONObject.java:641) 

、これは問題がいくつかの答えを追加することをお勧め問題を検索した後、このコードresponse.toString()

でStringに私のJsonObjectを変換しようとするために起こる問題は
mCaching.cache(response.toString(), Caching.TYPE_GLOBAL);
が起こるのラインでありますandroid:largeHeap="true"私のアプリケーションマニフェストファイルでは、クラッシュが生成される前に既にそれを追加します。どんな助け?

答えて

0

ほとんどの場合、JSONとして記述しようとしているオブジェクトは循環参照ループを持っています。巨大な画像をたくさん読み込んでいない限り、実際にはメモリが足りなくなるのは非常に難しいですが、保存しているデータが膨大でない限り、テキストコンテンツはそれほどではありません。

この場合でも、メモリストリングではなくファイルに直接JSONを書き込むことを検討する必要があります。また、一時ファイルに最初に書き込んだ後、そのファイルを移動して前に保存したデータを置き換えて、書き込みが途中で失敗した場合に備えて保存することをお勧めします。

+0

だから、このオブジェクトをキャッシュディレクトリから削除する必要がありますか? – Azak

+0

最初にキャッシュディレクトリに一時ファイルを書き込み、実際の名前(例:cache_temp.json - > cache.json)で名前を変更します。データを読み込むとcache.jsonがチェックされます。 – etan

+0

保存したデータに参照ループがないことを確認してください。 – etan

関連する問題