
Realm Nedir?
Realm Veritabanı SQLite gibi veritabanı yönetimine bir alternatiftir. Kısaca açık kaynak kodlu bir veritanı yönetim sistemidir.
Java, Javascript, .Net, Objective-C ve Swift’de mevcut ve hem iOS hem de Android için tasarlanmıştır.
Sıfır-kopya tasarımı sayesinde, Realm Database bir ORM’den çok daha hızlıdır ve genellikle ham SQLite’den daha hızlıdır. Resimlerde de yapılan testlerde hızı gözle görülür derecededir.
Realm Get
Örnek projeyi açmaya çalışırken hata alabilirsiniz ben Android Studio 3.1.3 de projeyi oluşturdum. Android Studio’nuz güncel olmalıdır.
Realm Kullanabilmek için bazı ön şartlar var bunlara dikkat etmelisiniz.
- Android Studio sürüm 1.5.1 veya üstü
- JDK sürüm 7.0 veya üstü
- Android SDK’nın yeni bir sürümü
- Android API Seviye 9 veya üstü (Android 2.3 ve üstü)
Not: Realm, Android’in dışında Java’yı desteklemez. Artık Eclipse’i bir IDE olarak desteklemiyoruz; lütfen Android Studio’ya geçin.
Gerekli detaylara Realm’ın anlatımından da bakabilirsiniz.
https://realm.io/docs/java/latest
Örnek olarak hazırlamış olduğum Ad Soyad ve Yaş bilgisini listview’e ekleme ve daha sonra listedeki herhangibir elemanı üzerine tıklayınca silme işlemi, uzun basılı tutunca da seçilen elemanı düzenleyip güncelleme işlemi yapan basit bir örnek oluşturdum. Dilerseniz bu örneği indirip kodları inceleyebilirsiniz. Kodlar açıklamalarla belirtilmiştir. İleriki zamanlarda daha detaylı olarak fırsat buldukça yazacağım.
build.gradle(Project) dependencies ‘ın altına ekliyoruz.
1 |
classpath "io.realm:realm-gradle-plugin:5.3.0" |
build.gradle (Module:app) application’ın hemen altına yapıştırıyoruz
1 2 |
apply plugin: 'com.android.application' apply plugin: 'realm-android' |
Şimdi Application sınıfımızı oluşturacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.realm.database.info.unalzafer; import android.app.Application; import io.realm.Realm; import io.realm.RealmConfiguration; public class MyRealmApplication extends Application { public void onCreate() { super.onCreate(); Realm.init(this); RealmConfiguration realmConfiguration=new RealmConfiguration.Builder().build(); Realm.setDefaultConfiguration(realmConfiguration); } } |
Android Manifest.xml dosyasında application’in içerisine aşağıdaki kodu ekliyoruz. url bölümünü kendi uygulamanıza göre düznelemeyi unutmayın.
1 |
android:name="com.realm.database.info.unalzafer.MyRealmApplication" |
Kendi uygulamamda oluşturduğum InfoModel java classı üzerinden anlatıyorum sizler de kendi class’ınızı oluşturduğunuzda gerekli değişimleri yapabilirsiniz. Class oluşturduktan sonra RealmObject extends ediyoruz. Daha sonra gerekli olan değişkenleri yazıyoruz. Biz burada int id olarak tanımladığımız “id” değişkenini main activty de göndereceğimiz primery key olarak da bildiğimiz her realm objesinin id sini veriyoruz. toString olarak tanımladığım ise yazılan her objeyi textview de görüntülemek için kullandım. Daha sonra değişkenlerimizin get set değerlerini tanımlıyoruz ki bunlara değer set edebilelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com.realm.database.info.unalzafer; import io.realm.RealmObject; public class InfoModel extends RealmObject { private int id; private String name; private String age; @Override public String toString() { return "Ad Soyad="+name+ " Yaş="+age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } } |
Şimdi geldik en önemli bölüme. Mainactivity.java da yapacak olduğumuz bağlantılar neler olacak şimdi tek tek açıklayalım. İlk olarak Realm’i global olarak tanımlayalım.
1 |
Realm realm; |
oncreate in içerisinde de atamasını yapalım.
1 2 |
realm=Realm.getDefaultInstance(); showInfo(); //eğer önceden eklenen veri var ise göstermek için method oluşturduk |
eğer kaydedilen verileri silmek istiyorsanız aşağıdaki kodu kullanabilirsiniz.
1 2 3 4 5 6 |
/* //her uygulama başlangıcında datayı sıfırlar realm.beginTransaction(); realm.deleteAll(); realm.commitTransaction(); */ |
Şimdi datayı kaydetmeyi öğrenelim. Realm ile data nasıl kaydedilir?
Uygulama üzerinden anlatıyorum siz bu bölümü istediğiniz yerde çağırabilirsiniz. Kaydet butonunun onclick methodunu yazdık. Butona tıklanınca yapılacaklar altta açıklamalı olarak belirttim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
public void Kaydet(View view) { if(btnSave.getText().toString().equalsIgnoreCase("Güncelle")){ update(); }else { //girilen datayı set etme realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { //primary key için otomatik arttırma Number maxId = bgRealm.where(InfoModel.class).max("id"); int nextId = (maxId == null) ? 1 : maxId.intValue() + 1; InfoModel duaModel = bgRealm.createObject(InfoModel.class); duaModel.setId(nextId); //key olarak tanımladık duaModel.setName(etName.getText().toString()); duaModel.setAge(etAge.getText().toString()); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { // Kayıt Başarılı Bir Şekilde Gereçekleşti ise showInfo(); clearText(); Toast.makeText(MainActivity.this, "Kayıt başarılı bir şekilde eklendi.", Toast.LENGTH_SHORT).show(); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { // Kayıt Başarısız ise bu bölüm çalıştırılır } }); } } |
Verileri şuan realm veritabanına ekledik. eklediğimiz verileri şimdi görüntülemek için listview ekledik ve yazdırdık.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public void showInfo(){ //datayı okuma ve listview de gösterme stringArrayList.clear(); RealmResults<InfoModel> realmResults=realm.where(InfoModel.class).findAll(); int i=0; for(InfoModel infoModel:realmResults){ try { stringArrayList.add(infoModel.toString()); i++; }catch (NullPointerException e){ e.printStackTrace(); } } arrayAdapter=new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, android.R.id.text1,stringArrayList); lvInfo.setAdapter(arrayAdapter); } |
Veritabanından eleman silmek için mainactivity içerisinde delete methodu oluşturduk.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//tek tek eleman silmek için. seçileni siler private void delete(final int position) { final RealmResults<InfoModel> realmResults=realm.where(InfoModel.class).findAll(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { InfoModel dog = realmResults.get(position); dog.deleteFromRealm(); refreshList(); } }); } |
Realm veritabanında eğer bir değişiklik yapmışsak bunu anlık güncellemek için aşağıdaki methodu kullanabilirsiniz. Örnek uygulamayı indirirseniz daha basit olarak anlayabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 |
private void refreshList() { //Listedeki datalarıdan sildiğimizde listview e güncelleme atıyoruz RealmResults<InfoModel> realmResults = realm.where(InfoModel.class).findAll(); stringArrayList.clear(); for(InfoModel infoModel: realmResults){ stringArrayList.add(String.valueOf(infoModel)); } arrayAdapter.notifyDataSetChanged(); } |
şimdi de geriye kalan güncelleme gibi kısımları ekliyorum açıklamalar içerisinde mevcut bazı methodları da ekledim ki arayarak da bulabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
private void duzenle(int position) { //listedeki herhamgi bir elemana uzun süre basılı tutunca elamnın değerlerini edittextlere yazdırıyoruz RealmResults<InfoModel> realmResults = realm.where(InfoModel.class).findAll(); final InfoModel updateTable = realmResults.get(position); screenText(updateTable.getName(),updateTable.getAge()); btnSave.setText("Güncelle"); this.selectPos=position; } private void screenText(String name, String age) { etName.setText(name); etAge.setText(age); } //güncelleme bölümü private void update(){ realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { RealmResults<InfoModel> realmResults = Realm.getDefaultInstance().where(InfoModel.class).findAll(); final InfoModel updateTable = realmResults.get(selectPos); updateTable.setName(etName.getText().toString()); updateTable.setAge(etAge.getText().toString()); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "Kayıt başarılı bir şekilde güncellendi.", Toast.LENGTH_SHORT).show(); refreshList(); clearText(); btnSave.setText("Kaydet"); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { Toast.makeText(MainActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show(); } }); } //edittextleri temizlemek için private void clearText(){ etName.setText(""); etAge.setText(""); } |
https://github.com/unalzafer/Realm

Bir yanıt bırakın