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..

Yazar: umiitkose

34 thoughts on “Android Studio JSON kullanımı

    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 ?

    Onur

    (22 Mart 2017 - 12:06)

    Merhaba Ümit,

    Bir uygulama üzerinde çalışıyorum. Uygulamam da web sitesine yüklemiş olduğum xml dosyasından tüm yemek menüsünü çekebiliyorum. Güncel tarihide alabiliyorum fakat bunun yanı sıra güncel tarihe göre listedeki uygun tarihi eşleştirip günlük(güncel tarihe uygun) yemek listesini nasıl çekebilirim. Bu konuda bana yardımcı olabilir misiniz? Gerek duyulursa kod paylaşımı yapabilirim.

    * web sitesine yüklemiş olduğum yemek listesi formatı şu şekildedir.

    [ { “Tarih” : “22.03.2017”,
    “Yemek” : “Pilic Buke
    Sahan Kofte
    Bulgur Pilavi
    Biberli Lahana Sote
    Zy.Brokoli
    Cilbir
    Elmali Tart
    Limonlu Kup”,
    “Kalori” : “1415” },

    { “Tarih” : “23.03.2017”,
    “Yemek” : “Dugun Corba
    Taze Fasulye
    Bezelye
    Kekikli Kuskus
    Sade Pirinc Pilav
    Zy.Bruksel Lahana
    Zy.Kereviz
    Peynir Tatlisi
    Tarcinli Sutlac”,
    “Kalori” : “1375” } ]

    tunahan

    (29 Mart 2017 - 15:49)

    Öncelikle elinize sağlık.
    Bir haftadır bu konuyu araştırıyorum, bir konu bu kadar zevkli ve anlaşılır anlatılır. 10 numara olmuş….

      umiitkose

      (29 Mart 2017 - 16:30)

      Merhaba artık bu tarz kullanım eski oldu. Volley, Retrofit ile de bu işlemleri kolay bir şekilde yapabilirsiniz. En kısa zamanda yeniden yazmayı bende çok istemekteyim.. Çok güzel yorumunuz için teşekkür ederim.

    SERAP

    (21 Nisan 2017 - 22:39)

    Json.java sınıfınındaki import org satırları bazı kelimeleri silik bazılar kırmızı olarak hata veriyor ne yapmalıyım yardımcı olurmusunuz?acillll

    SERAP

    (21 Nisan 2017 - 22:41)

    Json.java sınıfınındaki import org satırları bazı kelimeleri silik bazılar kırmızı olarak hata veriyor ne yapmalıyım yardımcı olurmusunuz?acillll

    Büşra

    (25 Temmuz 2017 - 17:23)

    try {
    // defaultHttpClient
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    HttpResponse httpResponse = httpClient.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = tpEntity.getContent();
    } catch (UnsupportedEncodingException e) {
    Log.e(“JSON Parser”, “UnsupportedEncodingException ” + e.toString());
    e.printStackTrace();
    } catch (ClientProtocolException e) {
    Log.e(“JSON Parser”, “ClientProtocolException ” + e.toString());
    e.printStackTrace();
    } catch (IOException e) {
    Log.e(“JSON Parser”, “IOException ” + e.toString());
    e.printStackTrace();
    }

    Bu kısımda hatalar var çözümü için yardımcı olabilir misiniz?

      umiitkose

      (25 Temmuz 2017 - 21:32)

      Merhaba Büşra Hanım,
      hatalar nedir ?

        Büşra

        (26 Temmuz 2017 - 09:31)

        android{useLibrary ‘org.apache.http.legacy’} şu şekilde ekledim dependencies kısmına ama bir değişiklik olmadı.

          Büşra

          (26 Temmuz 2017 - 10:49)

          Sorunu hallettim. Çok teşekkürler 🙂

    Büşra

    (26 Temmuz 2017 - 08:57)

    DefaultHttpClient
    HttpPost
    HttpResponse
    HttpEntity
    Bunları görmüyor.

      Büşra

      (26 Temmuz 2017 - 09:21)

      Dediğiniz gibi useLibrary ‘org.apache.http.legacy’ tırnakları düzelterek ekledim. Şu şekilde hata alıyorum.

      Error:(30, 0) Gradle DSL method not found: ‘useLibrary()’
      Possible causes:The project ‘JSON(UmitKose)’ may be using a version of the Android Gradle plug-in that does not contain the method (e.g. ‘testCompile’ was added in 1.1.0).
      Upgrade plugin to version 2.3.3 and sync projectThe project ‘JSON(UmitKose)’ may be using a version of Gradle that does not contain the method.
      Open Gradle wrapper fileThe build file may be missing a Gradle plugin.
      Apply Gradle plugin

    Ahmet

    (4 Kasım 2017 - 15:33)

    İyi günler Ümit Bey benim sorum array içinde bir array olursa onu nasıl çekeceğim mesela bir örnek vermek gerekirse hava durumunda bulutlu yazmıssınız peki bulutun içinde de parçalı bulutlu gibi tekrar bir array yazsak ve bunu çekmek istesek nasıl çekebiliriz Şimdiden Teşekkür ederim

    oguz

    (5 Nisan 2018 - 10:04)

    Arkadaşlar yukarıdaki json örneği çok var internette yabancı sitelerde fakat aşağıda vereceğim json örneğinin androidde kullanımını çok bulamadım kodlamadan anlayan arkadaşlardan ricam bu json örneğinin url den androidde kullanımı ve listelenmesi ile ilgili paylaşımlar yapmaları

    {“android”:{“ad”:”EURUSD”,”kisa”:”EURUSD Analysis Chart 05.04.2018″,”resim”:”eurusd05042018.png”},”android1″:{“ad”:”DE30EUR”,”kisa”:”GER30 Analysis Chart 05.04.2018″,”resim”:”ger3005042018.png”},”android2″:{“ad”:”NZDUSD”,”kisa”:”NZDUSD Analysis Chart 05.04.2018″,”resim”:”nzdusd05042018.png”},”android3″:{“ad”:”USDJPY”,”kisa”:”USDJPY Analysis Chart 05.04.2018″,”resim”:”usdjpy05042018.png”},”android4″:{“ad”:”XAUUSD”,”kisa”:”GOLD Analysis Chart 05.04.2018″,”resim”:”gold05042018.png”}}

Bir cevap yazın

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