"Enter"a basıp içeriğe geçin

Room Java ile Android üzerinde Sqlite database async crud işlemleri

Merhaba,

Room ile android üzerinde sqlite database kullanımını kolay bir şekilde gerçekleştirebiliyoruz. Gördüğüm diğer örneklerde genellikle “allowMainThreadQueries” kullanımı gösterilmiş. Normalde Main veya UI thread içerisinde IO işlemlerinin yapılmasına izin verilmiyorum. Bu uygulamamızın akıcılığını etkileyen bir şey. Ben bu örnekte AsyncTask kullarak nasıl Room ile crud işlemleri yapıyoruz onu göstermeye çalışacağım. Uyarı: AsyncTask kullanımın bir yan etkisi mevcuttur. İşlem bitmeden uygulama rotate edilirse Fragment/Activity yeniden create edileceği için hata vermekte ve uygulamamızın kapanmasına sebep olmaktadır. Konumuz olmadığı için şimdilik rotate kapalı bir uygulama olduğunu varsayarak ilerleyelim. İlk adımımız gradle dosyamıza Room bağımlılıklarını eklemek.

def room_version = "2.2.1"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version

Room için üç nesemiz var. Entity bu tablolarımızın androiddeki temsili. Doa (Interface) Bu bir Repository, Burada sorgularımızı tanımlıyoruz. Birde RoomDatabase dosyamız. Entity ile başlayalım.

https://gist.github.com/mahmut-gundogdu/69a02193272f316a50ddbbb707e16fd7

Burada @Entity ve @PrimaryKey anotationları Room kütüphanesinin. @Entity ile pojo nesnemizin bir entity olduğunu işaretliyoruz @PrimaryKey de tahmin edebileceğiniz gibi PK kolonunu belirtiyor.

https://gist.github.com/mahmut-gundogdu/49151107884af725a597531b74d04585

Doa objemiz. Burada Todo ile yapabileceğimiz sorgularımızı olusturuyoruz. Ben listeleme , Tek kayit getirme , yeni nesne kaydetme ve güncelleme işlemlerini ekledim.

https://gist.github.com/mahmut-gundogdu/07a9c86b9e88f6cb20c8db23612ea40b

AppDatabase objemizle birlikte gerekli tüm nesnelerimizi oluşturmuş olduk. Şimdi Room bağlanmak ve kullanmak için hazırız. Ancak yazımın başında da bahsettiğim gibi ayrı bir thread içerisinde erişmek istiyorum. Bu yüzden AsyncTask kullanacağım. Basitçe AsyncTask incelersek 3 tane type alıyor olacak.

public abstract class AsyncTask<Params, Progress, Result> {
}

İlk Type alacağımız parametre, örneğin update işleminde nesnemiz Entity parametre alacak. İkinci Nesnemiz Progress, üçüncü nesnemiz ResultType bu özellikle DoBackground’da işlemimizi yapıp onPostExecute içerisinde sonuçları işleyeceğimiz listeleme işlemlerinde önemli.

https://gist.github.com/mahmut-gundogdu/7ab5e8eae4c984bcb4528608990bb484

Burada private class olarak AsyncTask objelerimizi tanımlıyoruz. Eğer arayüzü dolduracaksak onPostExecute içerisinde arayüz işlemlerimizi yapıyoruz. Böylelikle database işlemlerimiz ayrı threadde çalışmış oluyor.

Projenin tam ve çalışır hali: https://github.com/mahmut-gundogdu/TodoAppWithRoom
LiveData ile veya Kotlin CoRoutine ile çok daha okunaklı olarak halledebiliriz. Bu da aklınızda olsun. İncelemenizi tavsiye ederim.

İlk Yorumu Siz Yapın

Bir cevap yazın

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