Solution of the java.lang.IllegalState Exception: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

Merhaba arkadaşlar , retrofit’ te baş belası haline gelen  “java.lang.IllegalState Exception: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $”  hatanın çözümünü paylaşacağım, 2019 yılında almıştım bu hatayı github’da bir issue açmıştım https://github.com/google/gson/issues/1462      bu hatayla ilgili bu nedenle  birçok mail alıyorum “nasıl çözerim” şeklinde bende bir yazı paylaşmanın zamanı geldiğini düşündüm.

Hatayı ilk aldığımda 2 gün çözmeye çalışmıştım, kendim hatanın nedenini farkedemeyince hatanın nedenini sormadığım forum kalmamıştı 🙂 .

Github’da google/json ‘da bir issue açtım çok geç olmadan hepimizin genelde bildiği Jake abimizden yorum geldi ;

Your JSON does not match the model you asked Gson to bind. This is fairly common and is a usage question which has been written about a lot on blogs, mailing lists, and StackOverflow. I would suggest you consult StackOverflow questions of similar nature.

Bu şekilde bir cevap almıştım ve “Your JSON does not match the model you asked Gson to bind.”  bu cümle çözümün ta kendisiydi.

Hemen request  attığım sayfadan gelen response json yapısına baktım ve android proje tarafında oluşturduğum modele baktım nasıl olması gerektiği hakkında bir fikrim yoktu . Hemen farklı Json yapılarını yapılarını araştırıp bunların nasıl modellendiğine baktım . sonrasında kendi Json yapıma uygun modeli oluşturdum. Bu sırada daha önceden öğrendiğim ama bir kez kullandığımdan olsa gerek unuttuğum  http://www.jsonschema2pojo.org/ bu sayfaya, response olarak gelen json çıktınızı verin . Bu sayfa size json yapınıza uygun,  java’da ‘ Pojo class ‘ olarak adlandırdığımız model class larınızı oluşturacaktır. Bu da sizin daha sağlıklı bir şekilde ilerlemenizi sağlayacaktır.

Şimdi sıra geldi bu model ile verileri nasıl işleyeceğinize …

Retrofit kütüphanesini kullandığınız sınıfta Call fonksiyonunuzda kulanacağınız ArrayList’e parametre olarak json modelinizin en tepesindeki root kökteki isimde oluşturulan model sınıfınızı parametre olarak verin .

Vee takın gözlükleri, Problem is solved !  😀

Konuyla ilgili sorunuz olursa yorum kısmına yazabilirsiniz..