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ı ( Post İşlemi )

Merhaba arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Android  derslerimize Android Retrofit Kullanımı  ile devam ediyoruz. Retrofit nedir, nasıl kullanılır ve Retrofit de GET isteği nasıl yapılır gibi sorulara ayrıntılı olarak önceki dersimizde yer vermiştim. Şimdi ise Retrofit REST istemcisi ile POST isteğini sizlere anlatacağım.

Ayrıca diğer dersimizde Retrofit kütüphanesinin eski sürümünü kullandım bu dersimizde ise Retrofit 2.0 yapısı ile işlemleri gerçekleştireceğim.

Retrofit kütüphanesinin ayrıntılı olarak ne işe yaradığını bu dersimizi inceleyerek öğrenebilirsiniz. Direk kodlara geçelim ve gerekli işlemleri gerçekleştirelim. Uygulamamızda bir login sayfamız olacak kullanıcı adı ve şifre yazarak servise post yapacağız dönen cevaba göre de eğer kullanıcı adı ve şifremiz doğru ise kullanıcının bilgilerini ekranda göstereceğiz , eğer yanlış ise hata mesajını göstereceğiz.

Öncelikle projemize Retrofit kütüphanesini ve json parse işlemleri için kullanacağımız retrofinin gson kütüphanesini dahil ediyoruz.

build.gradle

Daha sonra uygulamamızın görsel kısmını hazırlayalım.

activity_main.xml

Retrofit de ana kısmın url sini bütün API çağrıları için set edebilir , daha sonra 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. Aşağıdaki yapıyı incelediğimiz zaman @Body kısmında servise UserInfo objesini gönderiyoruz. UserInfo objesinin içinde üç parametre bulunmaktadır. ( islem, kullaniciAdi ve sifre ) çünkü POST işlemini gerçekleştirirken servis yapısı bizde bu üç değişkeni beklemektedir.

Login olabilmemiz için : ( islem : musteriGiris , kullaniciAdi: musteri1 , sifre: 1234 )

RetrofitLoginService.java

UserInfo sınıfımız aşağıdaki gibidir.

UserInfo.java

MainActivity.java

MainActivity sınıfımızı incelersek; uygulama çalıştığında login sayfası karşımıza geliyor orada kullanıcı adı ve şifreyi yazıp Giriş Yap butonuna bastığımızda Retrofit isteği sunucuya gönderiyor yukarıda bahsettiğim gibi @Body annotation kullanarak body kısmında gerekli parametreleri gönderip girilen bilgiler eşleştiğinde kullanıcıyı login yaptırıyoruz. İstek yaparken Call methodunu kullanıyoruz ve gördüğünüz gibi UserResponse sınıfı ile çağrımızı gerçekleştiriyoruz dönen cevabı ise Callback yapısını kullanarak handle ediyoruz. onResponse methodunda dönen cevap doğru ise oluşan UserResponse objesini bir listeye atıp , Serializable yardımı ile diğer PersonProfileActivity e gönderiyoruz. Ayrıca bir json parse etme işlemine gerek kalmadan istediğimiz yapı oluşmuş oluyor. Retrofit 2 ile gelen özelliklerden Call ve Callback yapısı gerçekten işimizi çok kolaylaştırıyor. Uygulamanın kaynak kodunu indirip çalıştırmanız ve incelemeniz de faydalı olacaktır.

UserResponse sınıfımızda aşağıdadır. Yukarıda bahsettiğim gibi sunucudan dönecek değerlerde neler olduğunu önce Postman de test edip baktıktan sonra bu yapıyı oluşturmamız çok daha kolay bir hale geldi.  İstek de bulunduğumuz url : http://vehbiakdogan.com/vakvak/servisci_panel/api/index2.php

UserResponse.java

UserResponse sınıfımızın içinde yer alan ve sunucudan çektiğimiz uygulama içinde de kullanacağımız kullanıcı bilgilerini içinde barındıran Bilgiler sınıfımızda aşağıdadır.

Bilgiler.java

Login başarılı olduktan sonra dönen cevaptaki bazı bilgileri RecyclerView kullanarak CardView içinde gösteriyoruz.

PersonProfileActivity.java

RecyclerView için oluşturduğumuz Adapter sınıfımızdaki kodlarda aşağıdadır.

CustomAdapter.java

Login olmadan önce ekran görüntüsü:

Login olduktan sonra ekran görüntüsü:

İşte arkadaşlar Retrofit ile POST işleminin nasıl olduğunu sizlere anlatmaya çalıştım. Ayrıca GET, PUT, DELETE gibi metodlar da var, bunların kullanımı da öğrenmek şart.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

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)
  • murat

    call.enqueue methodunu bir helper classı icinde yazdigmizi dusunursek response sonucunda donen listeyi activtye nasil return edebiliriz. yaptigim calismalarda once null listeyi donduruyor. listeyi doldurduktan sonra tekrar activitye gitmiyor.

    • Alper Beyler

      Merhaba buradaki dersin kaynak kodunu indirip çalıştırdınız mı ? onResponse methodunda UserResponse objesi dönüyor gördüğünüz gibi dönen cevabı Listeye atıp diğer Activity e gönderiyoruz. sizin sorunuz için eğer servisinizden dönen bir obje değilde bir liste ise aynı şekilde ilgili Activitye gönderebilirsiniz. ( Intent ile yada EventBus kullanarak )

      • murat

        Senaryoyu şu şekilde anlatayım. ContentListActivity adında bir activity im var. Bu sayfada bir takım veriler göstereceğim. Veri çekme işlemini ContentHelper adında bir classta GetContentList methodunda yapıyorum. Farklı activitylerde kullanmak için bu methodu ayrı classta yazdım. Activity den ContentHelper.GetContentList(); şeklinde gönderdiğimde ben bu listeyi nasıl alacağım. Farklı bir activity intent olarak gönderebiliyoruz listeyi sizin yaptığınız şekilde. Aynı activity e nasıl geri dönecek bu liste intent le oluyormu bilmiyorum. Yardımınızı bekliyorum.

        • Alper Beyler

          bu dersteki gibi interface methodu oluşturup kullanırsın istediğin activity de ayrı bir interface tanımlayarak da methodunu oluşturup listeyi set ve get leri tanımlarsın bu şekilde get ile ilgili listeyi çekebilirsin umarım anlamışımdır sorunuzu 🙂 ayrıca activity lerin haberdar olmasını istiyorsan intent ile veri göndermekle uğraşma EventBus dersimiz var onu bir incelemen faydalı olacaktır.
          https://www.mobilhanem.com/android-eventbus-kutuphanesi-kullanimi/

  • Pingback: Android Retrofit Kullanımı ( Post İşlemi ) https://www.mobilhanem.com/android-retrofit-kullanimi-post-islemi/ … – android()

  • Rıdvan Tunç

    sitedeki dersleri youtube’da videolu olarak anlatsanız ne güzel olurdu

    • Alper Beyler

      güzel olurdu tabiki 🙂 planlarımız arasında var fakat henüz gerçekleştiremedik.

  • Murat Korkmazoğlu

    hocam bende benzer bir uygulama yaptım farklı bir link kullanarak ancak login butonuna tıkladığımda progress çalışıyor ve kısa bir süre sonra hata veriyor uygulama
    hata şu şekilde
    “java.lang.RuntimeException: Parcel: unable to marshal value com.mrt.bk.UserResponse@55d808d”

    Çözümü hakkında bir fikriniz var mı şimdiden teşekkürler

    • Alper Beyler

      Merhaba, farklı bir link kullanıyorsanız sizin web servis bağlantınızda farklı olacaktır servisten dönen cevaplarda neler var ona bakmalısınız.. UserResponse objesinin içinde yer alan değerler servisteki değerlerle birebir eşleşmesi gerekiyor fakat sizin servisten dönen cevapta parse edemiyor anladığım kadarıyla.