2016-06-28 155 views
0

我正在尝试将大的JSONArray写入字符串,然后保存在SD卡中。在此过程中将JSONArray转换为字符串时发生OutOfMemory异常。代码将在下面给出。请任何人讲如何克服这个...将JSONArray转换为StringBuilder时的java.lang.OutOfMemoryError

代码:

JSONArray loanSurvey = callbackObject.getJSONArray("bankloansurvey"); 
      try { 
       String filename = "surveyfile.txt"; 
       File myFile = new File(surveyFolder, filename); 
       if (!myFile.exists()) 
        myFile.createNewFile(); 
       FileOutputStream fos; 
       StringBuilder surveyData = new StringBuilder(result.length()); 
       surveyData.append(loanSurvey.toString());   // here getting outofmemory error 
       byte[] dataArray = surveyData.toString().getBytes(); 

错误报告:

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.JSONArray.writeTo(JSONArray.java:602) 
                     at org.json.JSONStringer.value(JSONStringer.java:233) 
                     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.JSONStringer.value(JSONStringer.java:237) 
                     at org.json.JSONArray.writeTo(JSONArray.java:602) 
                     at org.json.JSONArray.toString(JSONArray.java:574) 

在此先感谢...

+0

试试这个[link](http://stackoverflow.com/questions/11275650/how-to-increase-heap-size-of-an-android-application) –

+0

什么是JSON的大小? – Mani

+0

如果内存不足,为什么不在线程中执行操作并增加堆大小? – silverFoxA

回答

-1

如果出内存比在线程中执行操作并增加堆大小。

编辑堆大小

转到Android清单并添加安卓应用标签内largeHeap = “真”

+1

'不要因为内存不足而请求一个大堆.' https ://developer.android.com/training/articles/memory.html –

+0

@GokhanArik请建议一个更好的方法来做到这一点,使我们的程序更加高效 – silverFoxA

+0

@Mani谢谢 – silverFoxA

0

可能有两个resons:

  1. 时内存泄漏你的申请。
  2. 设备在运行应用程序时没有足够的内存。

这里不能动态增加堆大小,但可以通过使用请求使用更多。

<application 
.................. 
.................. 
android:largeHeap="true"/> 

在manifest.xml中。