Kayıt Ol

Giriş

Şifremi Kaybettim

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Giriş

Kayıt Ol

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi adipiscing gravdio, sit amet suscipit risus ultrices eu. Fusce viverra neque at purus laoreet consequa. Vivamus vulputate posuere nisl quis consequat.

Android Retrofit Kullanımı

Merhaba arkadaşlar, Bugün dersimizde sizlere Square şirketi tarafından geliştirilen Retrofit kütüphanesinin kullanımı hakkında bilgi vereceğim. Retrofit açık kaynak kodlu REST İstemcisidir. Bu kütüphane biz geliştiricilerin işini gerçekten kolaylaştırıyor.

Sunucudan veri çekmek için kullandığımız diğer yöntemlere bakacak olursak:

AsyncTask yapısı ile yaptığımız isteklerde aşırı bir yavaş çalışma problemi ortaya çıkmıştı. Ayrıca çoklu asynchronous işlemlerinde , ön plandaki kontroller komplike bir hale dönüşmüştü.

Daha sonra ortaya Volley kütüphanesi çıktı o da bir network kütüphanesi olup , network bağlantılarını çok daha hızlı bir şekilde yapabilmemizi sağladığı gibi , bizi bir sürü kod yazmaktan kurtarmıştır. Ayrıca, Volley gösterilen URL adresine bağlanıp , orada sağlanan verileri bize sunuyor. Default olarak da Volley, sunucudan veri çekme gibi işlemleri asenkron olarak gerçekleştirebiliyor. Bunlardan dolayı da , AsyncTask yapısını kullanma gibi bir zorunluluk ortadan kalmış oluyordu.

Veri çekme ve network işlemleri , Retrofit kütüphanesi ile farklı bir boyut kazanmıştır.

Retrofit de ana kısmın url sini bütün API çağrıları için set edebilir , daha sonra static interfaceleri Java’nın annotation larını kullanarak oluşturabiliriz.

Sunucudan istek yapabilmek için , interface methodunu çağırmak yeterlidir ve sonucunda bize dönüş objesi dönmektedir.

AsyncTask, Volley ve Retrofit arasında genel bir karşılaştırma yapacak olursak da;

Volley ve Retrofit’in kullanımı AsyncTask dan daha kolaydır. 

Volley ve Retrofit hız olarak AsyncTask a göre daha performanslıdır. 

Retrofit ile JSON Parsing işlemleri otomatik olarak GSON ile gerçekleşmektedir.

Performans ile ilgili karşılaştırma verileri aşağıda yer almaktadır. Aşağıdaki verilere baktığımızda Retrofit ile istek yapıldığı zaman ; AsyncTask ve Volley e göre daha kısa bir sürede işlemin gerçekleştirildiğini göreceksiniz bu yüzden aralarında en hızlısı ve performanslısı Retrofit kütüphanesidir.

retrofit_performance

Retrofit kütüphanesinde kullandığımız Callback Interface yapısı ile otomatik olarak hataları ve cachelemeyi kontrol edebiliyoruz.

Şimdi gelelim bu dersimizin kodlamasına. Öncelikle retrofit kütüphanesini uygulamamızda kullanabilmemiz için build.gradle kısmına bunu ekliyoruz.

sunucuya giden istekleri ya GET ile yada POST ile göndeririz bunu kontrol edebilmek içinde yine build.gradle kısmına aşağıdaki kodu ekliyoruz.

Şimdi nasıl bir json verisi çekeceğimize bakalım :

Verileri bu adresten çekiyoruz. Tıkladığınız zaman aşağıdaki yapıyı göreceksiniz.

Şimdi ise yapmamız gereken bu linke tıklayarak karşımıza gelen ekrana json formatımızı yapıştırıyoruz. Yapıştırdıktan sonra belirli ayarları yapıyoruz aşağıdaki ekran görüntüsündeki gibi işaretli olan kısımlar seçili olmalıdır.

Source Type: JSON   Annotation style: Gson

Screen Shot 2015-11-18 at 01.30.44

 

 

 

 

 

Ayarları yaptıktan sonra Preview tuşuna basıyoruz ve bize uygulamamızda kullanacağımız pojo model yapısını otomatik olarak oluşturmuş oluyoruz. buda aşağıdaki gibi olacaktır.

pojo

 

 

 

 

 

 

Yukarıda oluşturduğumuz yapıyı uygulamamıza ekleyelim.

RetrofitModel.java

Retrofit için kullanacağımız interface yapısıda aşağıdaki gibidir. Burada POST ile mi GET ile mi istek yapacağımıza annotation ları kullanarak karar veriyoruz. Bu derste GET ile istek yapacağım için o şekilde yapıyı oluşturdum. /servejson yazmamın nedeni ise base url den ( https://mobilhanem.com/test/retrofitJson.php ) sonra gelen parametreleri o şekilde ekleyerek sunucuya istekde bulunabiliyoruz.

RetrofitModel[ ] adını verdiğimiz bu yapı json array i döneceği için [ ] kullandık eğer dönen cevabımız json arrayı olarak dönmeyecekse aşağıdaki yapıda RetrofitModel yazmamız yeterli olacaktı.

RestInterfaceController.java ( Interface )

MainActivity sınıfımız da aşağıdaki gibi olacaktır. Aşağıdaki yapıda Retrofit ile istekde bulunuyoruz oluşturulan Model den dönen cevaplarıda ListView de gösteriyoruz. Ayrıca ListView de hangi item e tıklandıysa yeni bir Activity e sunucudan gelen resmin adını gönderiyoruz ve o sayfada resmi gösteriyoruz. ListView i doldurmak için oluşturduğumuz Adapter sınıfını tekrar tekrar anlatmayacağım. Tek fark Adapter sınıfında Picasso kütüphanesi ile sunucudan dönen resimleri ListView de göstermek. Sizlere tavsiyem kaynak kodlarını indirip çalıştırmanızdır.

MainActivity.java

Items.java

Yukarıda bahsetmiş olduğum Listview için yarattığımız Adapter sınıfıda aşağıdadır.

CustomAdapter.java

Evet arkadaşlar işte bu kadar kolay ve hızlı bir şekilde sunucudan gelen verileri çekmiş olduk. Dediğim gibi kaynak kodlarını indirirseniz önemli yerlerine yorum olarak açıklamalarda ekledim ,bu kütüphanenin çalışma mantığını daha iyi anlayacaksınız. Json Parsing işlemini de otomatik olarak kendi içinde halletmeside bu kütüphanenin önemli özelliklerinden biridir.  Umarım faydalı bir ders olmuştur , Retrofit kütüphanesi ile ilgili izlenimlerinizi söylerseniz hem kullanımı açısından hem de bilgi birikimi açısından önemli olacaktır.

Ders hakkında soru ve önerilerinizi çekinmeden yorum bırakabilirsiniz. Bol Android’li günler sizin olsun 🙂

Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir. Diğer dersimde görüşmek üzere kendinize iyi bakın..

Yazar Hakkında

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014) Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)
  • hakann90

    Başarılı bir paylaşım olmuş elinize sağlık.. Retrofit de Post işlemi ile ilgili de bilgi verirseniz sevinirim

    • Alper Beyler

      saolun düşünceleriniz için.. get ve post işlemlerini yukarıda belirttiğim gibi interface yapısında oluşturmanız gerekmektedir.

  • Serhan Yılmaz

    Kaynak kodları indirdim ama MainActivity class içerisnde import fertrofit kütüphaneleri hata veriyor kodu çalıştıramadım.Çözümü nedir acaba

    • Alper Beyler

      merhabalar , nasıl bir hata alıyorsunuz build.gradle kısmına zaten eklendi kütüphaneler sdk ile ilgili bir problem olabilir

      • Serhan Yılmaz

        Sanırım öyle .Evet Problem SDK den kaynaklıymış Teşekkürler

  • Serhan Yılmaz

    Konuyla pek alakası yok ama bir sorum olucaktı.Android ile Google Chrome tarayıcısında bir Web Sayfasını(Face Twitter ve kötü amaçlı sayfaları) nasıl filtreleyebilrim .Öneriniz varsa çok sevinirim

  • Serhan Yılmaz

    Konuyla pek alakası yok ama bir sorum olucaktı. Aile Güvenliği ile ilgili proje aldım. Android Tarayıcıda Web Geçmişini Listeleyip Veritabanıma atabiliyorum.Bu Web geçmişinden Seçtiğim uygulamaları Filtrelemek istiyorum.Android ile Google Chrome tarayıcısında bir Web Sayfasını(Face Twitter ve kötü amaçlı sayfaları) nasıl filtreleyebilrim .Öneriniz varsa çok sevinirim

  • kadir00

    hocam gerçekten güzel bir anlatım olmuş

    • Alper Beyler

      teşekkürler saolun

  • osmangürbüz

    Merhaba hocam, sitenizi severek takip ediyorum bazı derslerde de video konulduğunu gördüm bundan sonra olacak derslerde video anlatımlı yapma şansınız var mı?

    • Alper Beyler

      malesef o şekilde ilerleme şansımız şuanlık yok.. ancak siteye konulan kaynak kodları çalıştırıp video üzerinden gösterebiliyoruz.

  • Hocam hayırlı geceler, ben verileri çekerken hem array olarak hemde tekli olarak çektiğim oluyor. 2 si bir arada olduğunda nasıl yapıyoruz acaba ?

    • Alper Beyler

      tam olarak anlamadım sorunuzu , array için ayrı bir yapı oluşturursunuz jsoupda normal veri için ayrı jsoup element lerini kullanarak

      • evet yazdığım biraz havada kaldı galiba, şöyle bi örnek verecek olursam;

        {
        “firsatlar_liste”:[
        {
        “firsatId”:”212″,
        “firsatYazi”:”fsdfsdfsdf”,
        “firsatArti”:”0″,
        “firsatZaman”:”2 hafta”
        },
        {
        “firsatId”:”211″,
        “firsatYazi”:”fsdfsdfsdf”,
        “firsatArti”:”0″,
        “firsatZaman”:”2 hafta”
        }
        ],
        “firsatSayi”:40,
        “uyeSehir”:”İstanbul”
        }

        Bu tarz bi json sonucunu nasıl alabilirim, yani neticede array olmayan firsatSayı ve uyeSehir değişkenlerim de bulunmakta..

        • Alper Beyler

          Merhaba, jsoup ile alakalı değil fakat bu sorduğunuz soru json parsing işlemi yapacaksınız objenin içinde bir array var zaten gördüğünüz gibi onun içindeki verilere ulaşabilirsiniz kolayca.. ( doInBackground methodu içinde yapılacak işlemler ile ) diğer belirttiğiniz veriler ise zaten json objesinin elemanları

          json çıktısını buraya yapıştırıp görebilirsin ne demek istediğimi ( http://www.jsoneditoronline.org )

          yourJsonObject.getString(“firsatSayi”); // firsatSayi verisine ulaşma
          yourJsonObject.getString(“uyeSehir”); // uyeSehir verisine ulaşma

          • Ali Can

            Aynen hocam benim json dosyam [ ile başlamıyor şöyle başlıyor
            { bu yüzden begin array hatası veriyor. Benim Dosya şu şekilde

            {
            “status”: “ok”,
            “count”: 1,
            “count_total”: 28,
            “pages”: 28,
            “posts”: [
            {
            “id”: 502,
            “type”: “post”,
            “slug”: “android-navigation-drawer-kullanimi”,
            “url”: “http://www.bilgidostu.com/android-navigation-drawer-kullanimi/”,
            “status”: “publish”,
            “title”: “Android Navigation Drawer Kullanu0131mu0131”,
            “title_plain”: “Android Navigation Drawer Kullanu0131mu0131”,
            “content:”deneme”,
            “date”: “2016-01-18 04:00:48”,
            “modified”: “2016-06-13 14:39:46”,
            “categories”: [
            {
            “id”: 34,
            “slug”: “android”,
            “title”: “Android”,
            “description”: “”,
            “parent”: 0,
            “post_count”: 7
            },
            {
            “id”: 36,
            “slug”: “java”,
            “title”: “Java”,
            “description”: “”,
            “parent”: 10,
            “post_count”: 3
            }
            ],
            “thumbnail_images”: {
            “full”: {
            “url”: “http://www.bilgidostu.com/wp-content/uploads/navigation_drawer.jpg”,
            “width”: 720,
            “height”: 378
            }
            ]
            }

  • Emre

    Merhaba, parametre olarak istek yollamak istiyorum. getData.aspx?id=5 şeklinde gibi.
    Controller kısmındaki Get kısmına bir şey yazmak istemiyorum. Fakat hata alıyorum.

    Bu şekilde istek nasıl yollayabilirim. Teşekkürler

    • Alper Beyler

      merhabalar , ne şekilde bir hata alıyorsunuz tam olarak ? bir de parametre olarak istek yollamak için bu şekilde bir yapı oluşturup denermisiniz
      @GET(“/my/API/call”)
      Response getMyThing(
      @Query(“param1”) String param1,
      @Query(“param2”) String param2);

  • EMRE

    Eline Sağlık. Güzel yazı. böyle örneklerin devamını bekliyoruz 🙂

    • Alper Beyler

      Teşekkür ederiz saolun elimizden geldiğince örneklere devam edeceğiz

  • Gürkan

    hocam, öncelikle güncel olarak dersler yayınladığınız için mobilhanem ailesine teşekkür ederim. bu dersinizde gerçekten faydalı oldu volley kütüphanesine göre daha avantajlı olması da şaşırtıcı. tekrardan iyi çalışmalar derslerinizin devamını bekliyorum 🙂

    • Alper Beyler

      saolun düşüceleriniz için, elimizden geldiğince yardımcı olmaya çalışıyoruz.

  • Hasan Özdemir

    Unfor…. Hatası

    restAdapter = new RestAdapter.Builder() Satırında Hata Gösteriyor

    at com.example.newsfeed.MainActivity.onCreate(MainActivity.java:42)

    • Alper Beyler

      uygulama içinde bağlandığın url in json döndürüp döndürmediğine bakar mısın ?

  • mesut Dokumacı

    Merhabalar Türkçe karakter sorunu yaşıyorum nasıl çözebilirim

    • Alper Beyler

      Merhaba uygulama içindemi bu sorunu yaşıyorsunuz ? yoksa retrofit de çektiğiniz veridemi eğer veri ile alakalı ise json formatını tekrardan kontrol etmelisiniz.

      • mesut Dokumacı

        Merhaba Alper bey sorun benim json dosyamdan kaynaklı olduğunu buldum düzelttim. Bide retrofit ile post olayını anlayabilirmisiniz

        • Alper Beyler

          Merhabalar, uygun bir zamanda dersi güncelleyerek anlatacağım, kolay gelsin

  • Musa Doğru

    Teşekkürler hocam gridview de resim üzerine tıkladığımızda farklı bir activity de resim açılıyor. Açıldıktan sonra geri tuşuna bastığımızsa mainactivicty kaldığı yerden devam ediyor. Bunu nasıl yapabiliriz ? ben verileri volley ile çekip json ile parse ediyorum.

    • mesut Dokumacı

      Resmi tıkladığında yeni activity başladıkdan sonra eski activityi sonlandıra bilirsin. Activitden geri dönerken mainactivity yeniden başlatırsan olur

  • İsa Solmaz

    Merhaba, örnekte action bar görükmüyor, onu nasıl geri getirebilirim ?

    • Alper Beyler

      merhabalar, bu dersimizi incelerseniz faydalı olacaktır https://www.mobilhanem.com/android-action-bar-kullanimi/ ayrıca, AppCompatActivity extends edebilirsin action barın gözükmesini istediğinin activityi

      • Isa Solmaz

        Teşekkür sorunu çözdüm minsdk=14 yaptım ve temayı şu şekilde ayarladım android:style/Theme.Holo.Light.DarkActionBar action bar geldi.

        • Alper Beyler

          sorunu çözmenize sevindim, kolay gelsin

  • Yasin

    Hocam çok teşekkür ediyorum benim şöyle bir sorum var mesela 100 tane kayıt var diyelim bu yöntem ile yaptığımda 100 tane kayıt uygulama açıldığında getirilecek. Ben uygulama açılınca 10 tane kaydın getirilmesini istiyorum scroll aşağı inince getirdiğim ilk 10 kaydın devamını getirmesini istiyorum. Yani facebook uygulaması gibi scroll aşağı inince yeni verilerin yüklenmesi gibi bunu nasıl yapabilirim ? sitenizde böyle bir yazı bulamadım.

    • deniz kaya

      Merhaba Dostum işini RecyclerView çözecektir

  • Pingback: Android Firebase Cloud Messaging ile Push Notification Göndermek - Mobilhanem()

  • zühtü şentürk

    kolay gelsin. upload sayfasını asp.net ile nasıl gerçekleriz??

    • Upload sayfası dediğin nedir ? Webservice mi ? O

      • zühtü şentürk

        Evet.Yaptığınız ornek bir web service var mı

  • zühtü şentürk

    “/servejson ” adresine ulaşılamıyor.Geliştirmiş olduğunuz retrofitJson.php dosyasını paylaşır mısınız?

  • Yusuf

    json dosyasına sunucudan erişmek isteyen arkadaşlar http://services.hanselandpetal.com/feeds/flowers.json linki kullanabilirler.

  • zühtü şentürk

    .json dosyasına @Query parametresi ile istediğimiz elemanı nasıl çekebiliriz

  • Pingback: Android Retrofit Kullanımı ( Post İşlemi ) - Mobilhanem()