Android 将JSONArray转换为StringBuilder时发生java.lang.OutOfMemoryError

Android 将JSONArray转换为StringBuilder时发生java.lang.OutOfMemoryError,android,arrays,string,out-of-memory,Android,Arrays,String,Out Of Memory,我正在尝试将大型JSONArray写入字符串,然后保存在SD卡中。在这个过程中,当将JSONArray转换为字符串时,会出现OutOfMemory异常。下面将给出代码。请任何人说出如何克服这个 代码: JSONArray loanSurvey = callbackObject.getJSONArray("bankloansurvey"); try { String filename = "surveyfile.txt";

我正在尝试将大型JSONArray写入字符串,然后保存在SD卡中。在这个过程中,当将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)
错误报告:

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)

提前感谢…

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

编辑堆


转到android清单并在应用程序标记中添加android:largeHeap=“true”,可能有两个原因:

  • 当应用程序内存泄漏时
  • 运行应用程序时,设备内存不足
  • 这里不能动态增加堆大小,但可以通过使用请求使用更多

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

    在manifest.xml中。

    试试这个JSON的大小是多少?如果内存不足,为什么不在线程中执行操作并增加堆大小?!在应用程序标签
    中添加android:largeHeap=“true”几乎需要7 mb@ManiGo到android清单,千万不要因为内存不足而请求一个大堆。
    @GokhanArik请建议一种更好的方法,这样我们的程序就可以做得更好efficient@Mani谢谢你把文件撕成碎片。不要一次写入所有内容。在这种情况下,我需要对整个字符串执行操作,怎么样!!