android java lang abstractstringbuilder enlargebuffer内存不足错误

时间:2017-03-28 14:09:24

标签: java android

在我的应用程序中,我尝试在我的设备中实现缓存数据,以便在离线模式下显示它。它之前工作正常,但现在我得到了这个崩溃。

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)

这就是问题发生的路线             mCaching.cache(response.toString(), Caching.TYPE_GLOBAL); 问题恰好在此代码中尝试将JsonObject转换为字符串response.toString()

在搜索问题后,一些答案建议在我的应用程序清单文件中添加android:largeHeap="true"但我已经在崩溃产生之前添加了它。任何帮助?

1 个答案:

答案 0 :(得分:0)

您尝试以JSON身份编写的对象很可能具有循环引用循环。实际上内存耗尽非常困难,除非您正在加载大量巨大的图片,但文本内容并非如此,除非您保存的数据很大,我怀疑

无论在这种情况下,您都应该考虑将JSON直接写入文件而不是内存String。此外,最好首先写入临时文件,然后移动该文件以替换以前保存的数据,以便在操作中途无法写入时保存。