Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
YayınlayanYonca Yalçınkaya Değiştirilmiş 9 yıl önce
1
BIL4106 - MOBiL PROGRAMLAMA TEKNiKLERi Yard. Doç. Dr. Oğuzhan Topsakal oguzhantopsakal@uludag.edu.tr7.05.2015
2
Bu Derste Web servislerle veri alişverişi Web servislerle veri alişverişi XML ve JSON formatları XML ve JSON formatları Web servislere örnekler Web servislere örnekler 2
3
Web Servis Neden Kullanılır? Nedir Nedir Network üzerinden bilgisayardan bilgisayara etkileşimi destekleyen yazılım sistemleridir Network üzerinden bilgisayardan bilgisayara etkileşimi destekleyen yazılım sistemleridir Web servis belli bir URLde bulunan, webden HTTP üzerinden gelen isteklere yanıt veren bir server daki bir uygulamadır. Web servis belli bir URLde bulunan, webden HTTP üzerinden gelen isteklere yanıt veren bir server daki bir uygulamadır. Web servislerin hangi dille yazıldığı genelde önemli değildir. Web servislerin hangi dille yazıldığı genelde önemli değildir. Neden Neden Verilerin hepsinin ilk app paketi içinde iletilmesi mümkün değil Verilerin hepsinin ilk app paketi içinde iletilmesi mümkün değil Webden yeni güncel verilere ulaşmak gerekebilir Webden yeni güncel verilere ulaşmak gerekebilir Kullanıcıdan yada cihazdan alınan verilerin iletilip saklanması gerekebilir. Kullanıcıdan yada cihazdan alınan verilerin iletilip saklanması gerekebilir. 3
4
Web Servis Nasıl Kullanılır 1 App aynı domainde yada farklı domainlerde birden fazla web servise bağlanıp veri alış verişi yapabilir 1 App aynı domainde yada farklı domainlerde birden fazla web servise bağlanıp veri alış verişi yapabilir Bağlantılar appnin çalışmasını bloke etmemesi için asenkronize şekilde thread içinde yapılır. Bağlantılar appnin çalışmasını bloke etmemesi için asenkronize şekilde thread içinde yapılır. 4
5
Web Servislerle Veri Alışverişinde Kullanılan Formatlar Web servislerle veri alış verişi genelde XML yada JSON formatları ile yapılır. Web servislerle veri alış verişi genelde XML yada JSON formatları ile yapılır. XML (Extensible Markup Language) XML (Extensible Markup Language).xml uzantılı.xml uzantılı JSON (JavaScript Object Notation) JSON (JavaScript Object Notation).json uzantılı.json uzantılı 5
6
XML Formatı XML (Extensible Markup Language) XML (Extensible Markup Language) başlama-tagı: başlama-tagı: bitiş-tagı: bitiş-tagı: boş-eleman tags: boş-eleman tags: Attribute: Başlama tagı içersinde isim/deger cifti Attribute: Başlama tagı içersinde isim/deger cifti Connect A to B. Connect A to B. XML tanimlama XML tanimlama Kontrol etmek icin: http://www.xmlvalidation.com/ Kontrol etmek icin: http://www.xmlvalidation.com/http://www.xmlvalidation.com/ 6
7
JSON Formatı - 1 Örnek:{ "id": 1, "id": 1, "name": "Foo", "name": "Foo", "price": 123, "price": 123, "tags": [ "tags": [ "Bar", "Bar", "Eek" "Eek" ], ], "stock": { "stock": { "warehouse": 300, "warehouse": 300, "retail": 20 "retail": 20 }} 7 Web sitesi: json.org Web sitesi: json.orgjson.org JSON doğruluk kontrol: http://jsonlint.com/ JSON doğruluk kontrol: http://jsonlint.com/http://jsonlint.com/ JSON nesnesi sırası önemli olmayan isim/değer çifti kümesidir. JSON nesnesi sırası önemli olmayan isim/değer çifti kümesidir. JSON nesnesi sol parantez ile başlar JSON nesnesi sol parantez ile başlar JSON nesnesi sağ parantez ile biter JSON nesnesi sağ parantez ile biter Her isimden sonra ‘:’ gelir Her isimden sonra ‘:’ gelir isim değer çiftleri ‘,’ ile ayrılır isim değer çiftleri ‘,’ ile ayrılır
8
JSON Formatı - 2 8 { "firstName": "John", "firstName": "John", "lastName": "Smith", "lastName": "Smith", "isAlive": true, "isAlive": true, "age": 25, "age": 25, "address": { "address": { "streetAddress": "21 2nd Street”, "city": "New York", "state": "NY", "postalCode": "10021-3100" "streetAddress": "21 2nd Street”, "city": "New York", "state": "NY", "postalCode": "10021-3100" }, }, "phoneNumbers": [ "phoneNumbers": [ { "type": "home", "number": "212 555-1234" "type": "home", "number": "212 555-1234" }, }, { "type": "office", "number": "646 555-4567" "type": "office", "number": "646 555-4567" } ], ], "children": [], "children": [], "spouse": null "spouse": null}
9
Web Servis API - örnekler Facebook API: https://developers.facebook.com/docs/android/getting-started Facebook API: https://developers.facebook.com/docs/android/getting-startedhttps://developers.facebook.com/docs/android/getting-started Twitter API: https://dev.twitter.com/rest/public Twitter API: https://dev.twitter.com/rest/publichttps://dev.twitter.com/rest/public Dropbox API: https://www.dropbox.com/developers/core Dropbox API: https://www.dropbox.com/developers/corehttps://www.dropbox.com/developers/core Open Weather API: http://openweathermap.org/api Open Weather API: http://openweathermap.org/apihttp://openweathermap.org/api Test için POSTMAN Chrome extension-app kullanılabilir. Test için POSTMAN Chrome extension-app kullanılabilir. 9
10
Open Weather API Şehir ismi ile: Şehir ismi ile: http://api.openweathermap.org/data/2.5/weather?q=London,uk http://api.openweathermap.org/data/2.5/weather?q=London,uk http://api.openweathermap.org/data/2.5/weather?q=London,uk Lat - Lng ile: Lat - Lng ile: http://api.openweathermap.org/data/2.5/weather?lat=40&lon=40 http://api.openweathermap.org/data/2.5/weather?lat=40&lon=40 http://api.openweathermap.org/data/2.5/weather?lat=40&lon=40 Alan kodu ile: Alan kodu ile: http://api.openweathermap.org/data/2.5/weather?zip=16940,tr http://api.openweathermap.org/data/2.5/weather?zip=16940,tr http://api.openweathermap.org/data/2.5/weather?zip=16940,tr Cevaptaki isimlerin açıklaması Cevaptaki isimlerin açıklaması http://openweathermap.org/weather-data#current http://openweathermap.org/weather-data#current http://openweathermap.org/weather-data#current Test için POSTMAN extension kullanılabilir. Test için POSTMAN extension kullanılabilir. 10
11
Network İşlemleri Main Threadde Yapılmaz Thread: bir programın kendini eş zamanlı birden fazla iş parçasına ayırabilmesinin bir yoludur. (http://developer.android.com/guide/components/processes-and-threads.html) Thread: bir programın kendini eş zamanlı birden fazla iş parçasına ayırabilmesinin bir yoludur. (http://developer.android.com/guide/components/processes-and-threads.html)http://developer.android.com/guide/components/processes-and-threads.html Ana (Main - UI) Thread: 1 tanedir Ana (Main - UI) Thread: 1 tanedir Arka plan (Background) Thread: Programların ana akışı bloke etmeden arka planda uzun sürebilecek işlemleri (networkden birşeyler okuma, veritabanından birşeyler okuma gibi) gerçekleştirmesine imkan verir. Arka plan (Background) Thread: Programların ana akışı bloke etmeden arka planda uzun sürebilecek işlemleri (networkden birşeyler okuma, veritabanından birşeyler okuma gibi) gerçekleştirmesine imkan verir. public void onClick(View v) { new Thread(new Runnable() { new Thread(new Runnable() { public void run() { public void run() { Bitmap b = loadImageFromNetwork("http://example.com/image.png"); Bitmap b = loadImageFromNetwork("http://example.com/image.png"); mImageView.setImageBitmap(b); mImageView.setImageBitmap(b); } }).start(); }).start();} 11
12
Ana Threadi haberdar etmek Arka planda çalışan işlemler bitince ana thread haberdar edilmesi gerekir Arka planda çalışan işlemler bitince ana thread haberdar edilmesi gerekir Activity.runOnUiThread(Runnable) Activity.runOnUiThread(Runnable) View.post(Runnable) View.post(Runnable) View.postDelayed(Runnable, long) View.postDelayed(Runnable, long) Ancak arka planda yaptığımız işlemler karmaşıklaşınca bunlarla işlem yapmak zorlaşabilir onun için AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) sınıfından yararlanmak daha iyi bir çözüm olur. İşlem bitince ana threaddeki UI elemanları güncellenir. Ancak arka planda yaptığımız işlemler karmaşıklaşınca bunlarla işlem yapmak zorlaşabilir onun için AsyncTask (http://developer.android.com/reference/android/os/AsyncTask.html) sınıfından yararlanmak daha iyi bir çözüm olur. İşlem bitince ana threaddeki UI elemanları güncellenir.http://developer.android.com/reference/android/os/AsyncTask.html 12
13
AsyncTask kullanımı public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png"); new DownloadImageTask().execute("http://example.com/image.png");} private class DownloadImageTask extends AsyncTask { /** The system calls this to perform work in a worker thread and delivers it the parameters given to AsyncTask.execute() */ /** The system calls this to perform work in a worker thread and delivers it the parameters given to AsyncTask.execute() */ protected Bitmap doInBackground(String... urls) { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); return loadImageFromNetwork(urls[0]); } /** The system calls this to perform work in the UI thread and delivers the result from doInBackground() */ /** The system calls this to perform work in the UI thread and delivers the result from doInBackground() */ protected void onPostExecute(Bitmap result) { protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); mImageView.setImageBitmap(result); }} Açıklama: AsyncTask Açıklama: AsyncTask String gönderilen parametrenin türü (burada URL string) String gönderilen parametrenin türü (burada URL string) Void gelişmeleri aldığımız verinin tipi Void gelişmeleri aldığımız verinin tipi Bitmap dönderilen verinin tipi Bitmap dönderilen verinin tipi 13
14
AsyncTask kullanımı Detaylar: http://developer.android.com/reference/android/os/AsyncTask.html Detaylar: http://developer.android.com/reference/android/os/AsyncTask.htmlhttp://developer.android.com/reference/android/os/AsyncTask.html doInBackground() metodu arka planda çalışır. Sadece bu metod gerekli. doInBackground() metodu arka planda çalışır. Sadece bu metod gerekli. onPreExecute(), onPostExecute(), ve onProgressUpdate() metodları ana threadde çalıştırılır onPreExecute(), onPostExecute(), ve onProgressUpdate() metodları ana threadde çalıştırılır doInBackground() elde edilen değer onPostExecute() doInBackground() elde edilen değer onPostExecute() Yapılanları yayınlamak için publishProgress() kullanılabilir (doInBackground() çağrılır ve onProgressUpdate() UI thread de çağırır) Yapılanları yayınlamak için publishProgress() kullanılabilir (doInBackground() çağrılır ve onProgressUpdate() UI thread de çağırır) Yapılanları herhangi bir threadden iptal edebilirsiniz. Yapılanları herhangi bir threadden iptal edebilirsiniz. 14
15
Hava Durumu Kodunun incelenmesi Hava Durumunu indirip kurun Hava Durumunu indirip kurun 15
16
Kişisel Bonus Ödevi App Inventor araştırması: Bu hafta Bu hafta App Inventor hakkında detaylı bilgi (en az 3 sayfa), App Inventor hakkında detaylı bilgi (en az 3 sayfa), App Inventor hakkında bulduğunuz ve beğendiğiniz en az 10 türkçe kaynak listesi, App Inventor hakkında bulduğunuz ve beğendiğiniz en az 10 türkçe kaynak listesi, Haftaya Haftaya Beğendiğiniz App Inventor örneği ve açıklaması Beğendiğiniz App Inventor örneği ve açıklaması 16
17
Haftaya Okuma Ödevi Android Appde map kullanımı: https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/androidde-haritalar- servisi https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/androidde-haritalar- servisi https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/androidde-haritalar- servisi https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/androidde-haritalar- servisi http://yesilcin.com/android-programlama-konum-bulma-ve-map-islemleri-t11007.0.html http://yesilcin.com/android-programlama-konum-bulma-ve-map-islemleri-t11007.0.html http://yesilcin.com/android-programlama-konum-bulma-ve-map-islemleri-t11007.0.html http://melihmucuk.com/android-programlama-konum-bulma-ve-map-islemleri/ http://melihmucuk.com/android-programlama-konum-bulma-ve-map-islemleri/ http://melihmucuk.com/android-programlama-konum-bulma-ve-map-islemleri/ ingilizce: https://developer.android.com/guide/topics/location/index.html https://developer.android.com/guide/topics/location/index.html https://developer.android.com/guide/topics/location/index.html http://mobiforge.com/design-development/developing-with-google-maps-v2-android http://mobiforge.com/design-development/developing-with-google-maps-v2-android http://mobiforge.com/design-development/developing-with-google-maps-v2-android http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html http://www.vogella.com/tutorials/AndroidGoogleMaps/article.html http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-application-setup-- mobile-15771 http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-application-setup-- mobile-15771 http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-application-setup-- mobile-15771 http://code.tutsplus.com/tutorials/android-sdk-working-with-google-maps-application-setup-- mobile-15771 17
18
Kaynaklar Android API: http://developer.android.com/reference/packages.html Android API: http://developer.android.com/reference/packages.htmlhttp://developer.android.com/reference/packages.html Udacity - Developing Android Apps (Google tarafından) Udacity - Developing Android Apps (Google tarafından) https://www.udacity.com/course/viewer#!/c-ud853/l-1395568821/m- 1643858569 https://www.udacity.com/course/viewer#!/c-ud853/l-1395568821/m- 1643858569 https://www.udacity.com/course/viewer#!/c-ud853/l-1395568821/m- 1643858569 https://www.udacity.com/course/viewer#!/c-ud853/l-1395568821/m- 1643858569 18
19
Sorularınız? 19
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.