Androidde JSON veriyle çalışmak

Üşengeçlik nedeniyle uzun süredir bakmadığım android projelerine bir önceki yazımla birlikte geri dönmemle birlikte ufak tefek işleri de aradan çıkartmak istedim. Bu yazımda sizlere web servis üzerinden gelen JSON verilerle nasıl çalışabilirizi göstermeye çalışacağım.

JSON (Javascript Object Notation) XML veri yapısına alternatif teşkil eden, gözle rahatlıkla okunabilen bir veri yapısı formatıdır. Hal böyle olunca veri transferinde kullanılması aşikardır. Özellikle .Net tabanlı uygulamalarda ağırlıklı olarak XML veri yapısının kullanılması ve ön plana çıkartılması nedeniyle duyulması biraz zaman almıştır.

Veri yapısına bağlı olarak %30 lara varan oranda XML veri yapısından daha az yer kaplamasından ve diğer programlama dilleriyle (Java, Javascript) uyumluğunu göze alarak ben de servislerimde dönüş formatı olarak JSON veri kullanmayı tercih ettim. Böylece ileriki zamanlarda olur da .Net web servislerinden vazgeçersem client tarafında yapılacak iş daha az olacağını ümit ediyorum.

Web Servis metodlarından çıkan DTO (Data Transfer Object) nesnelerini JSON formatında formatladıktan sonra (belki bir sonraki .net yazımız olur) oluşan JSON string 'imizi android uygulamamıza gönderiyoruz. Belki daha önceki yazılarımda bahsetmişimdir, android tarafında .net web servislerini kullanmak için KSOAP2 isimli kütüphaneyi kullanıyorum ve servis sorgulaması sonucu üretilen json stringini android client uygulamasına geçiriyorum. Dilerseniz öncelikle .net tarafında iletmek istediğim veriye ait sınıf yapısını inceleyelim.

Resimde görüldüğü gibi CategoryResponseDTO sınıfı client uygulama tarafına iletmek istediğim asıl nesnedir. Aynı şekilde içerisinde bana ait sınıfları içerebilir ve bu sınıflar birbirlerini miras alabilirler. Böyle karışık (aslında çok da karışık değil) nesneyi JSON formatına çevirdiğimizde aşağıdaki string oluşur.

{"Categories":[{"Image":"/Uploads/533a8bf0-2ca5-4ea1-a860-97ec4b4c6317.jpg","CaptionTR":"Çorbalarx","CaptionEN":"Soups","CaptionFR":"Fr Çorbalar","CaptionGE":"GR çorbalar","CaptionRU":"RUS çorbalar","CaptionAR":"AR çorbalar","ID":1},{"Image":null,"CaptionTR":"Yemekler","CaptionEN":null,"CaptionFR":null,"CaptionGE":null,"CaptionRU":null,"CaptionAR":null,"ID":2},{"Image":"/Uploads/noimage.png","CaptionTR":"Salatalar","CaptionEN":"Salads","CaptionFR":null,"CaptionGE":null,"CaptionRU":null,"CaptionAR":null,"ID":7},{"Image":"/Uploads/4990c79d-5103-4b72-9782-599c4c1a42a8.jpg","CaptionTR":"Doğumgünü Pastaları","CaptionEN":"Birthday Cakes","CaptionFR":"Birthday CakesFR","CaptionGE":"Birthday CakesGR","CaptionRU":"Birthday CakesRU","CaptionAR":"Birthday CakesAR","ID":8}],"ResponseCode":"0000","ResponseStatus":1,"ResponseMessage":null}

JSON formatına baktığımızda aslında verinin ne olduğunu anl
ayabiliyoruz. Yukarıdaki JSON string client uygulamasına geçtikten sonra dilediğiniz gibi parçalayabilirsiniz. Ama JSON verinin client tarafında oluşturulmasını istiyorsanız tıpkı sunucu tarafında olduğu gibi client tarafında da sınıfları tanımlamak gerekecek.

Görüldüğü gibi java kodunda da CategoryResponseDTO sınıfını ve bunun ana sınıfı olan ResponseBaseDTO sınıfını oluşturduk. .Net tarafındaki List<CategoryDTO> yapısını java tarafında ArrayList<CategoryDTO> olarak oluşturmak için aşağıdaki sınıf tanımlamalarını gerçekleştiriyoruz.


Dikkat ederseniz JSON verinin parçalanma işlemini ana sınıflarda (BaseDTO ve ResponseBaseDTO) sınıflarda başlatıp bunları miras alan sınıflarda sadece sınıfa ait üye için işlem yaptırıyorum. Bu sayede kontrollü bir şekilde JSON veriden sunucu tarafındaki veri sınıflarımızı client tarafa taşımış oluyoruz.

JSON veriyi parçalama işleminde JSONObject sınıfını kullanıyoruz. Dizi-liste işlemleri için JSONObject.getJSONArray() fonksiyonuna listeminizin ismini (Burada Categories) veriyoruz. Alınan bu JSON dizi verisi sonrasında diğer sınıflar içerisinde parçalanıp (parse) değişkenlere yerleştiriliyor.

Bu şekilde client uygulamasına gönderdiğiniz veriler, string işlemleri sonucunda ürettiğiniz verilerden daha güvenilir oluyor. Ayrıca işlemler miras mantığında ilerlediğinden belirli bir düzene oturmuş oluyor. Umarım bu yazımda ihtiyacınız olan sorulara yanıt bulmuşsunuzdur. Aklınıza takılanları buradan sorabilirsiniz.

Yorum Gönder