0

when i try to get string from server with json format, i get error as follows java.lang.OutOfMemoryError: Failed to allocate a 68706640 byte allocation with 16777216 free bytes and 37MB until OOM at java.util.ArrayList.add(ArrayList.java:118)

My java code is as follows

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);
  }

and the json structure I will be parsing is

{
    "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"
                }
            ]
        }
    ]
}

anyone can help?

15
  • If you have large amount of data, please use JsonReader which parsees data token-wise. I have used JsonReader to parse 5Mb of data and this worked the best :) Commented Oct 24, 2017 at 13:07
  • The VM is trying to allocate 65MB! Are you sure this is only text? Commented Oct 24, 2017 at 13:08
  • Have you tried Gson for json parsing?That will increase the parsing performance Commented Oct 24, 2017 at 13:08
  • Yes, this is only text Commented Oct 24, 2017 at 13:10
  • The json you provided seems like a small file, it should not be a problem. I have 2 suggestions: Use Google GSON for parsing, and try to load the json from a local file just to confirm json does not have huge blank spaces or something weird. Commented Oct 24, 2017 at 13:10

1 Answer 1

3

I think it might be this typo?

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

you're incrementing i instead of j.

Try changing code here :

for (int j=0; j<eventArray1.length(); j++)
Sign up to request clarification or add additional context in comments.

2 Comments

this can be the case in which you will be in an infinite loop @roihan
@SweetWisherツ hahh .. thanks a lot, that is the problem

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.