Herkese Merhabalar,

Son günümüzde, bu son blog yazımı biraz hüzünlü, biraz buruk yazıyorum. 1 haftamız doldu, eğitimimiz bitti.

Bu kısacık sürede kazandığım yeni arkadaşlıklar, yeni dostluklar çok güzeldi. Hayatımın en güzel haftasını yaşadım.

Sabah kahvaltısıyla günümüz başladı. Kahvaltıdan sonra eğitim salonunda yerlerimizi aldık. Konumuz Web Servis’ler idi. Kendimiz bir servis yazmadık, var olan servisleri uygulamamızda nasıl kullanabileceğimizi öğrendik.

Web Servis’lerin bize sağladığı en büyük kolaylık veritabanımız üzerinde yaptığımız işlemleri sadece bir kere yazmamız. Web Servis kullanmamış olsaydık hem Android hem İOS hem Web hem daha sonra başka platformlar için yazacağımız uygulamalarda ayrı ayrı SQL sorguları yazmak zorunda kalırdık. Bunu yapmak yerine bu sorguları Web Servislerimiz ile bir kere yazıp serverlarımızda depoluyor ve daha sonra bu serverlara istek atarak gerekli değişikilikleri yapıyoruz.

Bugün yaptığımız örnek uygulamamız Hava Durumu uygulamasıydı. Hava Durumu hizmeti sağlayan bir şirketin hava durumu api’sini kullandık.  Her web servisin bir dökümantasyonu mevcut. Bu dökümantasyona baktığımız zaman isteği nasıl atmamız gerektiği, bize dönecek sonucun nasıl olduğu detaylı bir şekilde belirtiliyor.

Bu api dışında bir de uygulamamız içinde yapacağımız istekler için ayrı bir kütüphane kullandık. Kütüphanemizin adı okHttp. Bu kütüphane sayesinde her şeyi tek tek yazmak yerine bir çok şeyi tek satırla bitimiş oluyoruz. Yine bu kütüphanenin de bir dökümantasyonu mevcut. Dökümantasyona bakarak kütüphaneyi nasıl kullanmamız gerektiğini, kütüphanenin hangi methodlara sahip olduğunu görebiliyoruz.

Böyle bir uygulamada uygulamamız için kilit bir nokta var. Web Servisler ile çalıştığımızı algılayan Android İşletim Sistemi uygulamamızın çalışmasına izin vermiyor ve “ViewRootImpl$CalledFromWrongThreadException” fırlatıyor. Hatamızın şundan kaynaklanıyor. Biz uygulamamızı çalıştırdığımızda normal şekilde kodları sırayla çalıştıran uygulamamız web servisin istek attığı yere geldiği zaman cevap beklemeye başlıyor ve cevap gelene kadar hiçbir işlem yapmıyor. Buna da Android işletim sistemi izin vermiyor.

Hatamızı çözmek için uygulamamızı aSync yani Asenkronize şekilde tasarlamamız gerekiyor. Uygulamamız istek atılan yere geldiği zaman isteği atıyor, çalışmaya devam ediyor ve cevap geldiği zaman gerekli işlemleri yerine getiriyor.

Bu kısmı da çözdükten sonra Hava Durumu web servisinden gelen sıcaklığı ekrana basmak istedik ve setText() ile beraber kodumuz yazdık. Bu sefer de uygulamamız ekrana hiç bir şey yazmıyor.

Bunu çözmek için de ekrana yazı yazmayı sağlayan bir async kod bloğu daha eklememiz gerekiyor. Detaylı bilgiye “runOnUiThread” sözcüğünü aratarak ulaşabilirsiniz. Burada amacım teknik bir yazıdan çok eğitimde başımdan geçenleri biraz olsun anlatabilmek.

Son olarak hava durumunu öğrenmek istediğimiz bölgenin enlem ve boylamını kullanıcıdan alıp ekranda gösterebilecek şekilde uygulamamızı şekillendirdik ve yüz yüze eğitimimizi sonlandırdık. Konularımızın devamını eğitmenimiz online eğitimlerde anlatacak. Online eğitimlerimiz de yaklaşık 2 hafta sonra başlayacak. Bu aralıkta biraz daha çalışıp kendimizi geliştirmemiz, yaşadığımız bazı sorunları, hataları bildirmemiz bekleniyor.

Bu kadar ders anlatımından sonra öğle yemeğine çıktık ve yemekten sonra eğitim salonumuzda Koordinatörümüz İsmail Bey bize kendi bölgelerimizde bu eğitim doğrultusunda nasıl eğitimi verebileceğimizi, nasıl bir yol izlememiz gerektiğini anlattı. Detaylı maili göndereceğini belirtti.

Konuşmadan sonra sıra Eğitmen Belgelerimizi almaya gelmişti. Uçak saatleri sebebiyle erken ayrılan arkadaşlarımız olmuştu fakat kalanlar olarak Eğitmenimizden belgelerimizi sırayla aldık. Ve evet artık ben de bir Habitat Gönüllü Eğitmeniyim.

Öncelikle bu kadar fırsatı, imkanı ve eğitimi bize sağlayan Habitat Derneği ve Samsung Türkiye’ye, daha sonra eğitmenimiz Onur Can Sert‘e ilgisi, alakası ve arkadaşlığı için çok teşekkür ediyorum ve sizleri eğitimde çektiğimiz bir kaç fotoğrafla baş başa bırakıyorum.

(Arkadaşlarımdan fotoğraflar geldikçe güncelleyeceğim 🙂 ) .

img-20161203-wa0000 img-20161202-wa0017 img-20161201-wa000720161201_21232420161130_133052 20161201_094607 img_3307