java - 从 Json 获取字符串而不出现 OutOfMemoryError

标签 java android json out-of-memory

当我尝试从服务器获取 json 格式的字符串时,出现如下错误 java.lang.OutOfMemoryError:无法分配具有 16777216 可用字节和 37MB 的 68706640 字节分配,直到 OOM 在 java.util.ArrayList.add(ArrayList.java:118)

我的java代码如下

JSONArray eventArray = eventResult.getJSONArray("event");
  for (int i=0; i<eventArray.length(); i++){
      final ArrayList<String> divisi = new ArrayList<>();
      final ArrayList<Timeline> timelines = new ArrayList<>();
      JSONObject eventObj = eventArray.getJSONObject(i);
      String namaEvent = eventObj.getString("nama_event");
      String deskripsi = eventObj.getString("deskripsi");
      String tanggal = eventObj.getString("tanggal");
      JSONArray eventArray1 = eventObj.getJSONArray("divisi");
      JSONArray eventArray2 = eventObj.getJSONArray("timeline");
      for (int j=0; j<eventArray1.length(); i++){
         JSONObject eventObj1 = eventArray1.getJSONObject(j);
         String namaDivisi = eventObj1.getString("nama_divisi");
         divisi.add(namaDivisi);
      }

      for (int k=0; k<eventArray2.length(); k++){
        JSONObject eventObj2 = eventArray2.getJSONObject(k);
        String tanggalTimeline = eventObj2.getString("tanggal_timeline");
        String deskripsiTimeline = eventObj2.getString("deskripsi_timeline");
        Timeline timeline = new Timeline(tanggalTimeline, deskripsiTimeline);
        timelines.add(timeline);
        }
  Event event = new Event(namaEvent,deskripsi,tanggal,divisi,timelines);
  events.add(event);
  }

我要解析的json结构是

{
    "error": false,
    "event": [
        {
            "id_event": "67",
            "nama_event": "Anforcom",
            "deskripsi": "Lomba mobile apps  nasional",
            "tanggal": "2017-10-21",
            "divisi": [
                {
                    "id_divisi": "DI-67-0",
                    "nama_divisi": "keamanan"
                },
                {
                    "id_divisi": "DI-67-1",
                    "nama_divisi": "humas"
                },
                {
                    "id_divisi": "DI-67-2",
                    "nama_divisi": "acara"
                },
                {
                    "id_divisi": "DI-67-3",
                    "nama_divisi": "PDD"
                },
                {
                    "id_divisi": "DI-67-0",
                    "nama_divisi": "keamanan"
                },
                {
                    "id_divisi": "DI-67-1",
                    "nama_divisi": "humas"
                },
                {
                    "id_divisi": "DI-67-2",
                    "nama_divisi": "acara"
                },
                {
                    "id_divisi": "DI-67-3",
                    "nama_divisi": "PDD"
                },
                {
                    "id_divisi": "DI-67-0",
                    "nama_divisi": "keamanan"
                },
                {
                    "id_divisi": "DI-67-1",
                    "nama_divisi": "humas"
                },
                {
                    "id_divisi": "DI-67-2",
                    "nama_divisi": "acara"
                },
                {
                    "id_divisi": "DI-67-3",
                    "nama_divisi": "PDD"
                }
            ],
            "timeline": [
                {
                    "id_timeline": "TL-67-0",
                    "tanggal_timeline": "2017-10-13",
                    "deskripsi_timeline": "Tes wawancara"
                },
                {
                    "id_timeline": "TL-67-0",
                    "tanggal_timeline": "2017-10-13",
                    "deskripsi_timeline": "Tes wawancara"
                },
                {
                    "id_timeline": "TL-67-0",
                    "tanggal_timeline": "2017-10-13",
                    "deskripsi_timeline": "Tes wawancara"
                },
                {
                    "id_timeline": "TL-67-0",
                    "tanggal_timeline": "2017-10-13",
                    "deskripsi_timeline": "Tes wawancara"
                },
                {
                    "id_timeline": "TL-67-1",
                    "tanggal_timeline": "2017-10-14",
                    "deskripsi_timeline": "Hasil tes wawancara"
                },
                {
                    "id_timeline": "TL-67-1",
                    "tanggal_timeline": "2017-10-14",
                    "deskripsi_timeline": "Hasil tes wawancara"
                },
                {
                    "id_timeline": "TL-67-1",
                    "tanggal_timeline": "2017-10-14",
                    "deskripsi_timeline": "Hasil tes wawancara"
                },
                {
                    "id_timeline": "TL-67-1",
                    "tanggal_timeline": "2017-10-14",
                    "deskripsi_timeline": "Hasil tes wawancara"
                },
                {
                    "id_timeline": "TL-67-2",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Technical meeting"
                },
                {
                    "id_timeline": "TL-67-2",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Technical meeting"
                },
                {
                    "id_timeline": "TL-67-2",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Technical meeting"
                },
                {
                    "id_timeline": "TL-67-2",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Technical meeting"
                }
            ]
        },
        {
            "id_event": "71",
            "nama_event": "I-Gate",
            "deskripsi": "Gathering antar angkatan mahasiswa informatika",
            "tanggal": "2017-10-28",
            "divisi": [
                {
                    "id_divisi": "DI-71-0",
                    "nama_divisi": "Humas"
                },
                {
                    "id_divisi": "DI-71-1",
                    "nama_divisi": "PDD"
                },
                {
                    "id_divisi": "DI-71-2",
                    "nama_divisi": "Keamanan"
                },
                {
                    "id_divisi": "DI-71-0",
                    "nama_divisi": "Humas"
                },
                {
                    "id_divisi": "DI-71-1",
                    "nama_divisi": "PDD"
                },
                {
                    "id_divisi": "DI-71-2",
                    "nama_divisi": "Keamanan"
                }
            ],
            "timeline": [
                {
                    "id_timeline": "TL-71-0",
                    "tanggal_timeline": "2017-10-21",
                    "deskripsi_timeline": "Pengumuman Tes Wawancara"
                },
                {
                    "id_timeline": "TL-71-0",
                    "tanggal_timeline": "2017-10-21",
                    "deskripsi_timeline": "Pengumuman Tes Wawancara"
                },
                {
                    "id_timeline": "TL-71-0",
                    "tanggal_timeline": "2017-10-21",
                    "deskripsi_timeline": "Pengumuman Tes Wawancara"
                },
                {
                    "id_timeline": "TL-71-1",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Tes Wawancara"
                },
                {
                    "id_timeline": "TL-71-1",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Tes Wawancara"
                },
                {
                    "id_timeline": "TL-71-1",
                    "tanggal_timeline": "2017-10-20",
                    "deskripsi_timeline": "Tes Wawancara"
                }
            ]
        },
        {
            "id_event": "72",
            "nama_event": "I Care",
            "deskripsi": "I Care",
            "tanggal": "2017-10-20",
            "divisi": [
                {
                    "id_divisi": "DI-72-0",
                    "nama_divisi": "Keamanan"
                },
                {
                    "id_divisi": "DI-72-1",
                    "nama_divisi": "Humas"
                },
                {
                    "id_divisi": "DI-72-0",
                    "nama_divisi": "Keamanan"
                },
                {
                    "id_divisi": "DI-72-1",
                    "nama_divisi": "Humas"
                }
            ],
            "timeline": [
                {
                    "id_timeline": "TL-72-0",
                    "tanggal_timeline": "2017-10-25",
                    "deskripsi_timeline": "Wawancara"
                },
                {
                    "id_timeline": "TL-72-0",
                    "tanggal_timeline": "2017-10-25",
                    "deskripsi_timeline": "Wawancara"
                },
                {
                    "id_timeline": "TL-72-1",
                    "tanggal_timeline": "2017-10-24",
                    "deskripsi_timeline": "Pengumuman"
                },
                {
                    "id_timeline": "TL-72-1",
                    "tanggal_timeline": "2017-10-24",
                    "deskripsi_timeline": "Pengumuman"
                }
            ]
        }
    ]
}

有人可以帮忙吗?

最佳答案

我想可能是这个错字?

for (int j=0; j<eventArray1.length(); i++){
     JSONObject eventObj1 = eventArray1.getJSONObject(j);
     String namaDivisi = eventObj1.getString("nama_divisi");
     divisi.add(namaDivisi);
  }

您正在增加 i 而不是 j。

尝试在此处更改代码:

for (int j=0; j<eventArray1.length(); j++)

关于java - 从 Json 获取字符串而不出现 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46911325/

相关文章:

android - GridView 捏缩放和无限(环绕)滚动

android - 如何使用库源代码创建 .aar 文件?

javascript - 将 MVC 模型序列化为 JSON

c# - 将单个对象插入 json 文件而不重写整个文件

Java:在子类化中使用通用通配符

java - Android中的回调是什么?

java - 在两个类之间建立正确的关系

android - 在选项卡内的 map fragment 底部添加一个 View

css - apache-superset 中的 label_colour 键存储在哪里?

java - 删除 Nattable 中的行号