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 ;
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..