Android 将JSONArray转换为StringBuilder时发生java.lang.OutOfMemoryError
我正在尝试将大型JSONArray写入字符串,然后保存在SD卡中。在这个过程中,当将JSONArray转换为字符串时,会出现OutOfMemory异常。下面将给出代码。请任何人说出如何克服这个 代码: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 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谢谢你把文件撕成碎片。不要一次写入所有内容。在这种情况下,我需要对整个字符串执行操作,怎么样!!