将JSONArray转换为StringBuilder时的java.lang.OutOfMemoryError

时间:2016-06-28 07:37:52

标签: android arrays string out-of-memory

我正在尝试将大型JSONArray写入字符串,然后保存在sdcard中。在此过程中,在将JSONArray转换为字符串时获取OutOfMemory异常。代码将在下面给出。请有人说如何克服这个......

代码:

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)

提前致谢...

2 个答案:

答案 0 :(得分:0)

可能有两个人:

  1. 当你的应用程序内存泄漏时。
  2. 运行应用程序时设备内存不足。
  3. 这里不能动态增加堆大小,但您可以通过使用来请求使用更多。

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

答案 1 :(得分:-1)

如果内存不足,则执行线程中的操作并增加堆大小。

编辑堆大小

转到Android清单并在应用程序标记中添加 android:largeHeap =&#34; true&#34;