Android Firebase Veritabanı CRUD İşlemleri

Merhaba arkadaşlar,

Bu dersimizde Google’un öne sürdüğü Firebase platformunun Realtime Database bulut servisini inceleyeceğiz. Ayrıca, gerçek zamanlı Firebase  Veritabanı kullanarak CRUD (Create, Read, Update, Delete ) işlemlerini nasıl yapabileceğimizi de anlatacağım. Bildiğiniz üzere Firebase platformu sayesinde bir çok işlemi gerçekleştirebiliyoruz ve bu platform  ( Realtime database, cloud messaging, crash reporting, storage, authentication gibi özellikleri kullanabilmemizi sağlıyor. ) Firebase ayrıca NOSQL bir veritabandır yani hiç bir SQL sorgusu yazmadan gerekli tabloları oluşturup json formatı ile kontrol ederiz.

Cloud Messaging ile Push Notification gönderme dersimizi daha önce anlatmıştık bu linkten inceleyebilirsiniz.

Ayrıca banner reklam ekleme desteği ile ilgili dersimizi de bu linkten inceleyebilirsiniz.

Örneğin üye giriş, çıkış ve kayıt işlemlerini authentication özelliğini kullanarak firebase in bize sunmuş olduğu servis sayesinde kısa yoldan halledebiliriz. Geliştirilen bir çok uygulama platform bağımsız olarak düşünüldüğünde aynı veriye her cihazdan erişmek ister. Uygulamalarda en çok önemli olan kaynakta veridir. Geliştirdiğiniz uygulamada login sistemi yer alıyorsa kullanıcı bilgilerine erişme, saklama ; uygulamanızı kullanan kişilerin bir takım bilgilerden haberdar olmasını istiyorsanız bildirim gönderme; uygulamanızın verilerini analiz edip, kaç crash yaşanmış hangi cihazlarda yaşanmış vb. gibi ayrıntılı crash raporlarına ulaşma ; ayrı bir veritabanı ve sunucu desteği oluşturmadan gerçek zamanlı verilere ulaşma gibi bir çok özelliği içinde barındıran firebase platformunu daha kapsamlı incelemek için kendi sitesini inceleyebilirsiniz. ( https://firebase.google.com )

Android Firebase Veritabanı CRUD İşlemlerini oluşturmak için gerekli adımları oluşturmaya başlayalım. Öncelikle android uygulamamızı oluşturuyoruz. Android Studio yu açtığımızda resimdede gördüğünüz gibi Tools sekmesinden Firebase seçeneğinde tıklıyoruz.( Tools -> Firebase )

Karşımızda çıkan ve yukarıda da bahsetmiş olduğum özelliklerden Realtime Database tıklıyoruz.

Daha sonra karşımıza çıkan pencerede çıkan seçenekleri uyguluyoruz. ( 1-Connect to Firebase ,

2- Add the Realtime Database to your app vb. ) Connect to Firebase dediğimizde developer console hesabımız olması gerekiyor zaten giriş yapmadıysanız uyarıyı alacaksınız bende gmail hesabım ile girişimi gerçekleştiriyorum. Buradaki işlemleri uyguladığımızda android studio da otomatik olarak gerekli alt yapıyı bize çıkaracaktır.

Android uygulamamızın adını yazıyoruz, Connect to Firebase tıklıyoruz ve hemen ardından Accept Changes diyoruz. Console Firebase sitesine girdiğimizde android uygulamamızı yarattığımızı görüyoruz.

Yukarıda gördüğünüz gibi uygulamamızı database realtime için hazır hale getirdik şimdi veritabanına read ve write işlemlerini yapabilmemiz için bu platformdan izin vermemiz gerekiyor. RULES yazan kısımdan read ve write işlemlerini true yapıp Publish ediyoruz.

( Firebase de bulunan bu rules sayesinde kullanıcıların yetkilerini kısıtlayabilir , sadece belirli verilere erişmesini sağlayabilir ve kendi kurduğunuz yapıya göre olmasını istediğiniz kontrolleri ekleyebilirsiniz. )

Şimdi uygulamamızda kullanacağımız veritabanı yapısını oluşturalım ben Müşteri -> Sipariş ilişkisini kullanacağım. Her bir müşteri farklı farklı siparişler verebilir. Örneğin x müşterisinin ; T-shirt aldığını düşünelim. y müşteriside gömlek alabilir. Yani bir müşteri birden fazla ürün sipariş verebilir. Veritabanı chartımız da aşağıdaki gibidir.

Veritabanımız şekillendiğine göre şimdi kodlamaya geçebiliriz , Customer ve Order Modellerimizi oluşturalım.

Customer.java

Order.java

Modellerimizi tanımladıktan sonra MainActivity sınıfımıza bakalım. Kodları incelerseniz eğer uygulama ilk açıldığında onStart methodunda Database reference üzerinden DataSnapshot ile child lara ulaşıyoruz ve ilgili kayıtlar var ise Customer modeline atarak Recyclerview in adapterına set ediyoruz. Böylece realtime database de Customer ile ilgili kaç kayıt var ise hepsini getirip ekranda göstermiş oluyoruz.

Veritabanında herhangi bir değişikliği dinlemek için addValueEventListener()  yapısını kullanıyoruz. Uygulamamızda göreceğiniz gibi veritabanında bir değişiklik yaptığımızda örneğin update, delete anında o verinin değiştiğini göreceksiniz. Firebase console dan da girerek örneğin; müşterinin adını değiştirdiğimizde android uygulamamızda yer alan müşterinin adınında otomatik olarak değiştiğini göreceksiniz.

Bir önceki makalede addValueEventListener() isimli veri tabanı dinleyicisini kullanmıştık. Bu dinleyici; veri tabanında her hangi bir değişiklik olduğunda harekete geçerek veri tabanının güncel halini bize göstermektedir.

MainActivity de customer yapısını göstereceğimiz için onCreate methodunda reference ulaşıyoruz.

Kayıt işlemi içinde aşağıdaki yapıyı oluşturuyoruz. FloatingButtona basıldığı anda ;her kayıt birbirinden farklı olması için bir id alıyoruz (customerId) kullanıcı uygulamada müşteri adını soyadını girdiğinde ve adres spinnerdan ilgili adresi seçtiğinde customer objesini oluşturuyoruz. Database reference in child methoduna id yi atıp setValue ile customer objemizi kaydediyoruz. Uygulama içinden kayıt işlemini bu şekilde yapıyoruz ayrıca firebase platformundan kendi oluşturduğumuz bir json dosyasını import ederek de kayıtları oluşturabiliriz.

Uygulamamızı çalıştırıp customer ve order eklediğimizde aşağıdaki json çıktısını aldığımızı göreceksiniz.

MainActivity.java

Kaydettiğimiz müşterileri ekranda gösterirken kullandığımız Recyclerview in Adapter yapısıda aşağıdadır. Adapter yapısını inceledğimizde müşteri güncelleme ve müşteri silme işlemlerinde yer aldığını göreceksiniz.

Recyclerview de listelediğimiz müşterilerden birini silmek için yapılan işlemler ; hangi müşteriyi silmek istiyorsak o müşterinin customerId sine göre ilgili reference çekiyoruz ve removeValue() fonksiyonu ile kayıtı siliyoruz. Tabi bu müşterinin siparişleri de olabilir bu yüzden sadece müşteriyi silmek yetmez; ilgili müşterinin siparişini de çekip removeValue() ile kaldırıyoruz.

Recyclerview de listelediğimiz müşterilerden birini güncellemek için yapılan işlemler ise yine aynı mantıkla aşağıda gösterilmiştir.

CustomerAdapter.java

Recyclerview da müşteriye tıkladığımızda ilgili müşterinin siparişlerinin olduğu sayfaya gidiyoruz. Yine daha önceden eklenen bir sipariş kaydı var ise ekranda gösteriyoruz. Ayrıca yeni bir sipariş girip kayıt edebiliyoruz.

DetailActivity.java

Gördüğünüz gibi Firebase veritabanı sistemi NOSQL olarak çalıştığı için tablolar yoktur ve sorgu yazmaya gerek kalmadan kolayca CRUD işlemlerini gerçekleştirebilirsiniz. En önemli özelliği ise asenkron olarak çalışarak ; anlık veri değişimlerini kullanıcıya gösterebilmesidir.  Örneğin müşteri kaydı yapıyoruz ve bağlantı yok bu offline durumunda ise çalışmaya devam ederek gerekli bağlantı sağlandığı anda güncellemeyi yaparak kullanıcıya değişikliği gösterir. Firebase gerçekten çok kapsamlı ve performanslı bir yapıya sahip bu yüzden detaylı olarak inceleyip örnekleri arttırmak gerekir. Ben sadece temel olarak sizlere firebase veritabanı yapısını CustomerOrder ilişisi üzerinden anlatmaya çalıştım.

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

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

Alper Beyler

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)

18 Yorum

  • Ders için teşekkür ederiz. Peki Ben mesela bir soru cevap uygulamasında verileri kaydettim felan ama Puanlarına göre nasıl sıralayıp çekebilirim. Mesela 100 üzerinden 96puan alan 1. sırada olsun 55puan alan 2. sırada olması gerekiyor. Nasıl yapabilirim?

  • Tebrikler eğitici bir paylaşım. Son girilen veriyi ilk sırada göstermek istiyorum. Nasıl yapabilirim ? Teşekkürler…

  • Merhaba ders için teşekkürler. Fakat ücretsiz plan aylık 100 kullanıcıya kadar izin veriyor. Diğer planlardan hangisini seçmek mantıklıdır sizce? Ya da şöyler söyleyim benim app içerisinde gerçek zamanlı bir chat odası kullandım Blaze paketi kullansam ki çok fazla bir şey yapmayacağım sadece kullanıcı sayısı sınırsız olsun diye chat içerisinde resim falan yok yazı ve emoji aylık ne kadar öderim tahminizce yada sırf bunun için değer mi?

    • Merhaba , kaynak kodları indirip çalıştırdınız mı ? dersin videosunu izlediniz mi ? firebase de veritabanı json datalar sayesinde oluşturulur. DatabaseReference databaseReferenceCustomers = FirebaseDatabase.getInstance().getReference(“customers”); dediğimizde customers parent olarak oluşur daha sonra da customers in içini siz şekillendirirsiniz o yapıda yine json olarak oluşturulur. kaynak kodları detaylıca inceleyip debug ederseniz anlamanız daha da kolaylaşacaktır yine sorunuz olursa sorabilirsiniz.

  • public static final String CUSTOMER_NAME = “com.mobilhanem.androidcrudexample.customername”;
    public static final String CUSTOMER_ID = “com.mobilhanem.androidcrudexample.customerid”;
    burdaki paket adını neye göre vericem ben kendi projemde
    public static final String CUSTOMER_ID =”” şu şekilde tanımlasak olur mu

    • Merrhaba, kendi projen için sıfırdan oluşturuyorsan kendi paket adını kullanmalısın önrk: com.mobilhanem.androidcrudexample benim oluşturduğum uygulamaya ait sende kendine göre oluştururusun com.paketadi.projeadi gibi

  • Müşteri ekledigimde müsteri gözükmüyor activity_main.xml de RecyclerView: No adapter attached; skipping layout hatası veriyor

    • Merhaba, buradaki kaynak kodu indirip denediğinizde mi bu hatayı alıyorsunuz ? video yu izlediyseniz eğer sıkıntısız çalışıyor biraz önce tekrardan denedim bu hatayla karşılaşmadım kod da değişiklik mi yaptınız tekrardan bi kontrol edermisiniz.

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?