Android Web Service Kullanımı - GET Örneği
Merhabalar arkadaşlar. Bu yazıda Android’de GET hizmeti sunan bir web servisin kullanımını anlatmaya çalışacağım.
Benim daha önce yazmış olduğum ve GET hizmeti sunan bir web servise request atıldığında şu şekilde, JSON formatında bir dönüş yapıyor.
Biz de bu dönen JSON’ı anlamlı hale getirip Android uygulamamız içerisinde kullanıcıya göstereceğiz.
Şimdi ilk olarak yapmamız gereken JSON’daki verilere göre POJO sınıfları oluşturmak olacaktır. JSON’a baktığımızda şunları görüyoruz:
- Dönen cevap başındaki ve sonundaki köşeli parantezlerden ötürü bir JSON Array.
- Bu JSON Array içindeki bir JSON objesi id, name, surname ve address alanlarına sahip.
- JSON içindeki address alanı ise iç içe JSON objesi. Dolayısı ile bu alan için bir POJO daha gerekli olacak.
Address alanı için şu şekilde bir POJO yazalım:
Address.java
Address sınıfı dönen cevap içindeki address alanının sahip olduğu tüm alanlara ve onların get-set metotlarına sahip bir sınıf.
Şimdi bir de Person adında bir sınıf oluşturalım.
Person.java
Person sınıfı içersinde de JSON içindeki alanları temsil eden değişkenlerimiz mevcut.
Android tarafında kullanıcıya bilgileri MainActivity üzerinde göstreceğiz. Bu nedenle MainActivity sınıfımız içinde gerekli çağırımları yapmamız gerekiyor. MainActiviy sınıfımız da şu şekilde:
MainActiviy.java
MainActivity sınıfımızın onCreate metodu içerisinde Activity’nin oluşturulması ve layout’un atanması işlemlerinin ardından bir adet GetDataFromWebWervice nesnesi elde ediyoruz. Bu nesneyi web servisden verileri liste halinde getirecek metodu çağırırken kullanacağız.
Akabinde ise personArrayAdapter isminde, Person tipinde veri ile tanımlanan ArrayAdapter oluşturuyoruz. ArrayAdapter’ın yapılandırıcısına this anahtarı ile bu sınıfı, android.R.layout.simple_list_item_1 ile Layout’umuzu ve getDataFromWebWervice.getPersonListFromWebService() ifadesi ile de yazdırılacak verileri veriyoruz.
ListView listView = (ListView) findViewById(android.R.id.list); ifadesi ile activity_main.xml içerisindeki ListView’a erişiyoruz ve listView.setAdapter(personArrayAdapter); satırı ile de az önce oluşturduğumuz Adapter’ı bu listView’a koyuyoruz.
Şimdi web servisden veri çekme ve bize liste şeklinde dönme işlemini yapacak olan GetDataFromWebService sınıfını inceleyelim.
GetDataFromWebWervice.java
GetDataFromWebWervice sınıfı AsyncTask sınıfını kalıtan bir sınıf. AsyncTask sınıfından kalıtmadan uygulamayı çalıştırdığımda uygulama çalışmıyordu. Sebep olarak da MainActivty sınıfından başlamak üzere internet tabanlı bir işlem yapılacağı zaman Android buna izin vermiyor. AsyncTask sınıfı üzerinden bu işlemin yapılması tavsiye ediliyor.
Metotların çağırılması sırasına göre metotları inceleyelim.
getPersonListFromWebService metodu içerisinde bir adet PersonList oluşturuyoruz. try bloğu içerisinde String json = new GetDataFromWebWervice().execute(“http://10.0.2.2:8080/SpringRestTutorial/getExample”).get(); ifadesindeki execute ifadesi ile GetDataFromWebWervice sınıfı içerisindeki doInBackGround metodunu çağırıyoruz. İfadenin sonundaki .get() ile de doInBackGround’un döndürdüğü String’i alıyoruz.
doInBackGround metodu String tipinde değişken sayılı parametre alma durumuna sahip. Bizim execute içerisinde gönderdiğimiz URL’i strings[0] diyerek elde ediyoruz. try bloğu içerisinde gelen parametre olarak gelen URL ile bir URL nesnesi oluşturuyoruz. Bir alt satırda da getStringFromInputStream metoduna url.openStream() ifadesinden gelen InputStream’i göndererek metodu çağırıyoruz . getStringFromInputStream metodu az önce tarayıcıda gördüğümüz JSON’ı bize String olarak olarak döndürecek metot. getStringFromInputStream metodundan dönen String’i de metot içindeki json String’ine atayıp json String’ini döndürüyoruz. Döndürdüğümüz json String’i JSON formatına sahip bir String.
getPersonListFromWebService metodu json String’ini elde ettikten Google’ın GSON kütüphanesini kullanarak bu JSON formatındaki String’i parçalıyor. Person objelerini oluşturup listeyi doldurup döndürüyoruz. GSON kullanımını http://ilkaygunel.com/blog/2016/gson-tutorial/ adresinde anlatmıştım. İlgili adresteki yazıyı okuyarak buradaki kod bloğunu daha iyi anlayabilirsiniz.
getStringFromInputStream metodu kendisine gelen InputStream’i String’e çevirip bize göndermekle yükümlü. Metot içerisinde BufferedReader ve StringBuilder nesneleri tanımlıyoruz. try bloğu içerisinde, br = new BufferedReader(new InputStreamReader(is)); satırında metoda gelen InputStream ile bir InputStreamReader oluşturuyoruz ve bunu da BufferedReader sınıfının yapılandırıcısına vererek BufferedReader nesnemizi oluşturuyoruz. while döngüsü ile de BufferedReader’ı satır satır okuyarak her bir satırı StringBuilder’a ekliyoruz. Metot çıkışında da StringBuilder’ı String’e çevirerek return ediyoruz.
Uygulamayı çalıştırdığımızda şu şekilde bir ekran görüntüsü bizi karşılıyor:
Gördüğünüz gibi web servisden veriyi alıp ekrana başarı ile yazdırabildik. Ekrandaki yazım şekli Person sınıfındaki toString metodundan gelmektedir. Burada ListView için özel bir (Custom) adapter yazılıp görünüm daha iyi bir formata sokulabilir. Onu da başka bir yazıda anlatırım arkadaşlar.
Gelecek yazıda görüşene kadar sağlıcakla kalın arkadaşlar.
Selam ve Sevgilerimle