Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JSON android中解析数据时内存不足?_Android_Json_Dalvik_Heap Memory - Fatal编程技术网

在JSON android中解析数据时内存不足?

在JSON android中解析数据时内存不足?,android,json,dalvik,heap-memory,Android,Json,Dalvik,Heap Memory,嗨,我正在解析来自JSON的数据。在分析数据时,我遇到了内存不足错误和dalvik堆。如何克服这个问题。我在网上搜索我没有找到任何解决方案,请帮助我 提前谢谢 03-06 08:19:00.618:E/dalvikvm堆(1415):2506782字节分配的内存不足 JSONObject jsonObj1 = new JSONObject(jsonStr1); ArrayList<String> matter1= new ArrayList<String&

嗨,我正在解析来自JSON的数据。在分析数据时,我遇到了内存不足错误和dalvik堆。如何克服这个问题。我在网上搜索我没有找到任何解决方案,请帮助我

提前谢谢

03-06 08:19:00.618:E/dalvikvm堆(1415):2506782字节分配的内存不足

JSONObject jsonObj1 = new JSONObject(jsonStr1);

          ArrayList<String> matter1= new ArrayList<String>();

          String stat = jsonObj1.getString(TAG_stat);
          String suc=jsonObj1.getString(TAG_success);

          // Getting JSON Array node
          matter = jsonObj1.getJSONArray(TAG_mdata);

          // looping through All Contacts

          dbdata =new ArrayList<String>();

          for (int i = 0; i < matter.length(); i++) {

              JSONObject j = matter.getJSONObject(i);

              String ddesc= j.getString(TAG_ddesc);
              String spd= j.getString(TAG_sped);
              String gzid=j.getString(TAG_geozid);
              String dev = j.getString(TAG_devid);
              matter1.add(stat);
              matter1.add(suc);

              Log.v("contact", ""+matter1);

              dbdata.add(ddesc);
              dbdata.add(spd);
              dbdata.add(gzid);
              dbdata.add(dev);


              dbdata1.add(dbdata);
JSONObject jsonObj1=新的JSONObject(jsonStr1);
ArrayList matter1=新的ArrayList();
String stat=jsonObj1.getString(TAG_stat);
String suc=jsonObj1.getString(TAG_success);
//获取JSON数组节点
matter=jsonObj1.getJSONArray(TAG_mdata);
//通过所有触点循环
dbdata=newarraylist();
for(int i=0;i
关于这一点,一个奇怪的事情是,崩溃只在应用程序运行的第2次或第3次发生,这让我相信,应用程序消耗的内存不会在每次应用程序关闭时被垃圾收集

这当然是有可能的,如果是这样的话,那么可能是由于内存泄漏,可以追溯到您的应用程序正在做的事情。我认为您应该将最初的精力集中在调查这方面……而不是分块加载文件。(我不熟悉Android工具链,但我确信它包括内存使用分析器或内存转储分析器。)

编辑

作为对你后续评论的回应,事实上它在3次中运行了2次,这表明你的应用程序应该大致按原样运行。不可否认,如果输入文件变大,你没有多少余地

不过有几个想法:

与其将文件读入字符串并在字符串上运行JSON解析器,不如使用可以直接从流中读取的解析器。当前的解决方案在执行解析时需要内存中两个完整数据副本的空间

如果文件变得更大,您可能需要考虑一种不会创建完整的数据内存表示形式的设计


我不确定以“块”的形式读取JSON文件是否是一个好主意。这可能会给解析JSON带来问题…具体取决于您分块阅读的意思。

使用Gson库。将优化您的所有过程。

在您的设备中删除一些dta。请参阅my ans bro。希望它能工作。您也从服务器获取图像吗?不,从服务器获取数据。您正在处理图像吗?请发布您的code。通常不是分配引发了错误,而是您正在使用的内存导致了分配问题第一次只有我的应用程序没有打开?