Android Dersleri 25
Merhaba arkadaşlar. Uzun zamandır yazmayı istediğim fakat yazamadığım “Android ile web servis kullanımı” konusunu sizinle paylaşıyorum.
Web Servisler, başkalarının alıp kullanması ve istediği sonucu alması için hazırlanırlar. Birileri bir web servis hazırlar, bize o servisin WSDL adresini verirler ve biz de bu adrese erişip gerekli parametreleri göndeririz. Sonucunda bize bir değer döner. Yazılım dünyasında web servisler oldukça sık kullanılır.
Önce örnek bir web servis tanıyalım ve kodlamaya geçelim. Bizim kullanacağımız web servis başka olacak.
WEB SERVİS’İ TANIMAK
1) Şimdi dışarıya web servislerini açan http://www.webservicex.net adresine girelim. Burada birçok web servis var. Fakat biz http://www.webservicex.net/length.asmx servisini inceleyelim. Bu bir .Net servisidir. Bu linke girdiğinizde aşağıdaki gibi bir ekran gelir.
2) Burada ChangeLenghtUnit diye bir metod yani fonksiyon var. Bu fonksiyona parametre gönderip sonucu alınır. Bu metoda tıklarsak şöyle bir ekran gelecektir.
3) Bakın burda 3 adet alan var. Bu alanlara 3 parametre gönderilir ve sonucunda bize değer döner. Yani bu metod milimetre, santimetre gibi değerleri birbirine dönüştürür
4) Peki hangi parametreler var. Bunu daha net görmek için bu web servisin WSDL dosyasına bakmamız gerek. Linkin sonuna ?WSDL parametresini de eklersek, bu web servisin aldığı ve geriye döndürdüğü parametreleri görürüz. Yani şu linki tarayıcımızda açalım
http://www.webservicex.net/length.asmx?WSDL
Şunu unutmayın ki hazırladığınız bir web servisi dışarıya açtığınızda, bunu kullanacak olanlar WSDLadresine erişerek kullanırlar. WSDL adresinde, gerekli parametreler açıkça yazılıdır. Bu arada biz web servis yazmıyoruz görüldüğü gibi hazır yazılmış olan bir servisi kullanıyoruz.
5) Yukarıdaki resim, web servisin WSDL dosyası. Burada 1 tane metod var ve bu metodların aldığı parametreler gösteriliyor.
6) 1 numaralı alan, ilk paramterenin tipi. 2 numaralı alan, hangi ölçüm biriminden dönüştürme yapılacağını, 3.alan ise hangi birime dönüştürme yapılacağıdır. Yani 1000.0, santimetre, milimetre parametrelerini gönderirsek; 1000.0 değerini santimetreden milimetreye çevirir. Bu arada1000.0 diyoruz çünkü double tipinde parametre istiyor
7) Şimdi yukardaki 3 alana, sitenin üzerinden değerler gönderip sonuca bakalım. Uygulamamızın sonundaandroid’den değerler göndereceğiz fakat dediğimiz gibi bunu örnek için anlatıyorum, ben başka bir web servis kullanacağım.
Burada 1000.0 değerini santimetreden milimetreye dönüştürmek istiyoruz. Invoke butonuna basalım.
Sonuç yukarıdaki gibi karşımıza gelir. Fakat girdiğimiz parametre isimleri önemli. SOAP mesajında yazıldığı gibi ingilizce isimleri ile büyük küçük harflere dikkat ederek yazmalıyız.
Örnek bir web servis tanıdık. Şimdi kendi kullanacağımız bir web servisi kısaca gösterelim.
KULLANACAĞIMIZ WEB SERVİS
http://www.w3schools.com/webservices/tempconvert.asmx adresine girersek aşağıdaki gibi bir ekran karşımıza çıkar.
Buradaki web serviste 2 metod var. Biz üsttekini kullanacağız. Santigrat cinsinden değer veripFahrenayt tipinde sonucu alacağız.
Üstteki metoda tıklarsak aşağıdaki gibi bir ekran karşımıza gelir.
Burda derece girip Invoke butonuna basınca Fahrenayt tipinde karşılığını verir. Alttaki SOAPmesajında görüldüğü gibi kullanmamız gereken tipin ismi Celsius‘tur ve String tipindedir. BuradaCelsius ismini unutmayın. Çünkü aşağıda kodlarken tırnak içerisinde bu isme, girdiğimiz değeri atayacağız. Kullanacağımız web servisi tanıdık ve kodlamaya geçiyoruz.
PROJE OLUŞTURMA
1) İlk olarak projeyi oluşturalım.
2) Daha sonra projemiz için isim gireceğiz.
3) Next Next diyerek sürekli ilerleyelim. Son adımda karşımıza aşağıdaki gibi bir ekran gelecektir.
4) Burada Finish diyoruz. Projemiz oluştu.
KSOAP’ı IMPORT ETME
Web servislere erişebilmek için bir kütüphane gereklidir. Ben KSoap kullanacağım. Bundan başka kütüphaneler de kullanabilirsiniz.
Şimdi KSoap’ı bu adresten indirelim ve indikten sonra kopyalayıp, Eclipse içindeki libs klasörünün içine yapıştıralım.
İndirip Eclipse içine kopyaladıktan sonra son görünüm:
Bundan sonra değişikliklerin geçerli olması için Project menüsünden Clean diyebilirsiniz ya da Eclipse’yi kapatıp tekrar açabilirsiniz. Proje ismine sağ tıklayarak Build Path>Configure Build Path>Libraries>Add External Jars ile de bu kütüphaneyi ekleyin ne olur ne olmaz.
Şimdi KSoap’ı import ettik. Burada şunu belirtelim ki aşağıda kodlama yaparken SOAP ismi içeren soapile ilgili bir kod yazdığımızda hata mesajı alıyorsak CTRL+SHIFT+O tuşlarına basın ve import edilmemişsoap paketlerini sınıfınıza dahil edin. Eclipse’ye kopyalayıp yapıştırmak yetmiyor. Bu sadece kütüphaneeklemektir. Sayfanıza da ayrıca eklemeniz gerek.
İmport işlemi bitti şimdi kodlamaya geçelim.
KODLAMA
1) activitymain_xml dosyamızı açalım ve aşağıdaki gibi 1 edittext, 1 buton, 2 textview koyalım.
2) edittext‘e parametre göndereceğiz,, butona tıkladıktan sonra sonucu textview‘da alacağız. Görsel kısım bittikten sonra şimdi MainActivity.java sınıfına gidelim ve kodlamaya başlayalım. Bu arada bu sayfanın xml dosyasını vermek istemiyorum. Çünkü sürükle bırak yaparak bu hale getirmeniz gerekiyor. Ayrıca kodları resim olarak veriyorum ki yazarak öğrenin ve eliniz alışsın.
— 3 numaralı alanda bir değişken tanımladık ve değerine sitenin adını yazdık. Yani web servislerini dışarıya açan site
— 2 numaralı alanda başka bir değişken tanımladık. Adı METHOD_NAME. Bu da web servisteki metodun adı.
— 1 numaralı alandaki değişkende de bu ikisinin birleşimini yazdık. Bu, SOAP tarafından kullanılır ve ayrıştırılır.
— 4 numaralı alanda tanımlanan URL değişkenine ise asmx uzantılı servisin adresini yazdık.
— 5 numaralı alanda birer nesne oluşturduk.
— 6 numaralı alanda bu nesneleri id’leri ile birbirine bağladık. Bu id değerleri de xml sayfamızın kodkısmında bulunuyor. Yanlış bağlamayın. Tek satırda da bu nesneleri oluşturup bağlardık fakat final olarak tanımlamamız gerekirdi.
3) Buradakileri yazdığınız zaman hata veriyorsa, CTRL+SHIFT+O tuşlarına basın ve paketleri importedin. Daha sonra MainActivity.java sınıfımızın kodlamasına aşağıdaki gibi devam edelim.
— 1 numaralı alanda butonumuz için listener oluşturduk.
— 2 numaralı alanda SoapObject nesnesi oluşturduk ve 2 parametre verdik. Bu Soap mesajı, aldığı parametreleri ayrıştırır ve ilgili servise gider. Daha sonra bir request adlı nesneye property ekledik. ismi“Celsius” ve değeri de deger.gettext() ile alındı.
— 3 numaralı alanda SoapEnvelope nesnesi oluşturduk ve versiyon olarak 1.1 sürümünü kullandık.
— 4 numaralı alanda .Net servisi kullanacağımızı belirttik ve bu envelope nesnesine request nesnesini ekledik.
— 5 numaralı alanda bir nevi protokol tanımladık. Alışverişi buradan sağlayacağız.
— 6 numaralı alanda bu protokol için gerekli ayarları yaptık. Bu nesne üzerinden response metodunu çağırdık. Cevabı string olarak alacağımız için SoapPrimitive tipinde aldık. Eğer XML tipinde değer dönseydi SoapObject tipinde olacaktı.
— 7 numaralı alanda da textView alanına sonucu yazdırdık.
MANIFEST’TE INTERNET IZNI EKLEME
1) İnternet kullanımını açmak için de AndroidManifest.xml dosyasını açalım ve aşağıdaki işlemleri yapalım.
2) Alt kısımda Permission tabına tıklayın ve Add butonuna basın.
3) Burada karşınıza gelen ekrandan Uses Permission seçeneğine çift tıklayın.
4) Karşınıza aşağıdaki gibi bir ekran gelecek. Soldaki ComboBox’tan INTERNET’i seçin ve Ctrl+s ye basarak kaydedin.
Böylece internete erişme izni eklendi. Android telefonunuza bir uygulama yüklerken sizden izin ister. O izinler bu ayarlar ile yapılıyor.
EKRAN ÇIKTILARI
Uygulamamızın ekran çıktılarına bakalım:
Sonraki derslerde görüşmek dileğiyle. Sonraki derste, bir siteden hava durumu bilgisi çekmeyi düşünüyorum.