Android Studio JSON kullanımı

Herkese Merhaba, Android Studio ile ilgili artık derinlemesine konulara girmeye başladık. JSON nedir? Bu soruyu soruyorsanız önceden yazdığım yazıyı okumanızda fayda var.

  • Okunabilen veri biçimi
  • {} içindeki herşey JSON’ın objesidir. [] içindeki herşey Jsonda diziye denk gelmektedir.
  • Desteklediği veri tipleri olarak –> Number,String,bool,Array,Object ve null

Öncelikle JSON için 2 şeyi yapıcaz. Android manifest’te İnternet izni alıcaz ve bir tane de JSONParser adlı dönüştürücü kullanıcaz. JSONParser internetten verileri çekmek için hazır oluşturulmuş kod parçacığı oluyor. Parametre olarak verdiğimiz linke sorgu atıyor ve cevap olarak bu linki döndürüyor. String formatında json’ımız dönüyor ve biz ayrıştırıyoruz.

Basit bir hava durumu uygulaması yapıcam. Genişletilmiş olarak’ta bunun uygulamasını yayınlıcam. (Döviz’de olabilir bu uygulama farklı olsun diye..)

Öncelikle Android Manifest için İnternet izni alıyoruz.

Sonrasında JSONParser dosyamızı class’ımıza ekliyoruz.

Bundan sonra olacaklar :

http://api.openweathermap.org/data/2.5/find?q=Ankara&units=metric  Bu siteden verileri çekiceğiz. Öncelikle siteye girin.  Karmaşık bir şekilde yazılmış. Bunu daha okunur hale getirmek için jsoneditor kullanabilirsiniz. http://www.jsoneditoronline.org Örneğin bu site. Ne kadar anlaşılır ve kolay okunur olduğunu gösteriyoruz.

2015-09-05_16h31_31

Basit bir uygulama yapacağım. Bu json’da Şehir ismini, Ülkesini, Sıcaklığını ve Koordinatlarına erişeceğim.

Activity_main.xml dosyamız :

2015-09-05_16h33_03

Sıra geldi son işleme java dosyasında yapılacaklara:

Öncelikle activity_main’de oluşturduğumuz elemanları çekicez. 4 tane TextView, 1 tane EditText ve 1 tane de Button.

Button’u aktif edince bir metod çalışsın. AsynTask’tanda kalıtım alalım.

  • AsynTask ne işe yarıyor peki ? :

AsyncTask  javada bulunan thread yapısının android için özelleştirilmiş bir class yapısıdır.Android sdksı ile developerlara sunulunan asynctask android de multi-thread programcılığına katkı sağlamaktadır.

  • Peki AsyncTask  Ne Zaman Kullanılır?

AsyncTask arka planda işler yapmak gerektiği zaman kullanılabileceği gibi uzun sürebilecek işlemlerde  Main thread veya UI threadıni engellememek için kullanabiliriz.Kısaca anlatmak gerekirse arkada planda bir işlem yaparken kullanıcıya’da ön planda bu işlem hakkında bilgi vermek için kullanılabilir. Örnek vermek gerekirse UI değişikliği yapılacağı zaman,web servis ile sunucuya bağlanılacağı zamanlarda kullanılabilir.

 

3 Metodunu kullanıyoruz. Onların açıklaması..

  • onPreExecute: Arka plan işlemi başlamadan önce ön yüzde değiştirilmesi istenen değişkenlerin (ProgressBar gibi animasyonlar) ve AsyncTask içinde gerekli değişkenlerin değer ataması yapılır.
  • doInBackground: Arka planda yapılması istenen işlem burada gerçekleşir. Bu metod içinde yapılan işlemler ön yüzde kullanıcının uygulamayı kullanmasını kesinlikle etkilemez. Eğer buradaki işlemler sonucunda ana akışa bir değişken gönderilmesi gerekiyorsa return metodu ile bu değişkenonPostExecute metoduna paslanabilir.
  • onPostExecute: doInBackground metodu tamamlandıktan sonra işlemlerin sonucu bu metoda result değişkeni ile gönderilir. Buradaki işlemler ana akışı etkiler ve herhangi bir hataya sebep olmaz. Arka plandaki işlemden gelen bir veri ön yüzde gösterilmek isteniyorsa bu metod içinde gösterim işlemi yapılabilir.

Kodların yanına açıklamalarını yaptım.

2015-09-05_15h52_29 NOT :

Bu kısmı eğer apache linkini görmüyorsa ekleyin.. Sebebi 22’den sonraki sürümlerde destek vermemesidir. Ekleyip snch ediniz..

Post Author: umiitkose

Android Studio JSON kullanımı” için 21 yorum

  • yusuf

    (30 Ekim 2015 - 17:28)

    import org.apache.http.HttpEntity;
    gibi kütüphaneleri görmüyor sebebi ne olabilir?

    • umiitkose

      (30 Ekim 2015 - 20:30)

      android {
      useLibrary ‘org.apache.http.legacy’
      }
      Gradle.app kısmına bunu eklemeniz gerekmektedir. 22’den sonraki sürümlerde görmemeye başladı.

  • Mehmet

    (15 Kasım 2015 - 04:53)

    Teşekkürler Ümit, çok faydalı oldu, kendi web servisimizi yazıp kendi servisimizi çağırmayı anlatmayı düşünüyor musun ?

    • umiitkose

      (15 Kasım 2015 - 16:51)

      Ben Teşekkür Ederim Mehmet, En kısa zamanda yazmaya çalışırım. Ama şuan Mysql – php bağlantısı ve maps üzerine çalışıyorum. Siz benden önce yazın yayınlayalım :)

  • atakan

    (24 Kasım 2015 - 15:35)

    Merhabalar,

    Beni yeniyim. Olayı tam olarak kavrayamıyorum.
    Yahoo’dan döviz kurlarını çekecek bir Android
    uygulaması yazmam gerekiyor.
    Nereden başlamalı ve neler yapmalıyım?
    Yardımcı olabilir misiniz acaba?

    Şimdiden teşekkür ederim.
    Kolay gelsin.

    • umiitkose

      (24 Kasım 2015 - 16:00)

      Merhaba Atakan, Öncelikle buradaki işlemleri yap mantığı kavra. Nasıl çekeceksin ne yapacaksın gibi. Anlamadığın yeri bence sorarsan daha yararlı oluruz.

  • atakan

    (24 Kasım 2015 - 16:51)

    Hemen yanıtladğınız için teşekkür ederim.
    O halde ben de hemen işe başlıyorum :)

    • umiitkose

      (25 Kasım 2015 - 20:08)

      Siz başlayın takıldığınız yerde facebook ya da gmail üzerinden konuşuruz :)

      • atakan

        (1 Şubat 2016 - 18:21)

        Merhabalar,

        Önceki mesajımın üstünden yaklaşık iki ay geçmiş.
        Hayret, zaman ne kadar hızlı geçiyor!..

        Bu geçen süre zarfında 2 java, 1 Android kitabı
        bitirdim. Epey ilerleme kaydettim diyebilirim.
        Ancak hala bilmediğim çok şey olduğunu biliyorum :)

        Bir konuda yardımınızı rica edeceğim.
        Örneğin Yahoo’dan döviz kurlarını çeken bir program
        yaptım. Bunun içinde ayrıca bir FAVORİLERİM veya
        SIK KULLANDIKLARIM gibi bir List yapmak istiyorum.
        Bunun NASIL Yapılacağı konusunda bilgi verebilir
        misiniz mümkünse?

        Kolaylıklar ve başarılar dilerim.

  • Ali Menekşe

    (21 Aralık 2015 - 16:32)

    Ümit bey yardım edin mailime cevap verin lütfennn!!!

  • hüseyin

    (11 Ocak 2016 - 19:51)

    merhaba ümit ;
    android {
    useLibrary
    ‘org.apache.http.legacy’
    }

    nereye kopyalamam lazım suan onu yapamadım yardımcı olursanız sevinirim

    • umiitkose

      (12 Ocak 2016 - 19:01)

      Merhaba Hüseyin bey, Gradle App’de dependies’in içine olması gerek

  • mehmeterenballı

    (16 Mart 2016 - 17:34)

    android studio kullanıyorum.cannot resolve defaulthttpclient diyor.httppost içinde aynısı geçerli.internettten aradım dependencies e şunu koy falan diyo.koydum.rebuild dedim yine çalışmıyor.yardımcı olursanız sevinirim.

    • umiitkose

      (17 Mart 2016 - 11:23)

      useLibrary ‘org.apache.http.legacy’ (İki tırnak düzgün çıkmıyor onu elle düzeltirsiniz.) Gradle’de app kısmında dependencies kısmına yapıştırırsanız hata gidecektir. Sonra Built’ten clean project yaparsanız düzelir :)

  • ali veli

    (17 Mart 2016 - 00:31)

    iyi günler android stduio api 18 ile bu projede JSONParser i ekleyince hata veriyor üzeri kırmızı oluyor ve hata açıklamsı yok neden olabilir ?

    • umiitkose

      (17 Mart 2016 - 11:23)

      useLibrary ‘org.apache.http.legacy’ (İki tırnak düzgün çıkmıyor onu elle düzeltirsiniz.) Gradle’de app kısmında dependencies kısmına yapıştırırsanız hata gidecektir. Sonra Built’ten clean project yaparsanız düzelir :)

      • ali veli

        (17 Mart 2016 - 13:09)

        malesef sync edilmiyor onu ekledeğimde tırnaklarıda düzgün koydum

  • Rıdvan Burak

    (12 Temmuz 2016 - 02:23)

    Hüseyin bey verileri cekerken api key gerekmiyormu gerekiyorsa tam olarak nerede kullanacağız? Teşekkürler

  • Kübra

    (27 Temmuz 2016 - 11:36)

    Ümit bey ben projeyi çalıştırdım,kodlamada hata yok,ama Textviewdeki değerleri null olarak döndürüyor,bana yardımcı olabilir misiniz Acaba hata nerde çok önemli bir proje için lazım hayati bir mesele :(

  • Kübra

    (28 Temmuz 2016 - 11:55)

    Hocam,bunu lokalde denemek için index.php adlı sayfama sizin kullandığınız json verilerini kaydettim.çalıştırdım,sorun yok.Ama,siz url’e String weatherUrl=”http://api.openweathermap.org/data/2.5/find?q=”+ sehirIsmi.getText() +”&units=metric”; yazdınız.Bense String weatherUrl=”http://localhost/phpcalisma/index.php”+sehirIsmi.getText() +”&units=metric” yazdım ve sayfam çalışmadı.Bağlantı stringimi ne olarak değiştirmem gerek sizce ?

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">