Merhaba arkadaşlar,
mobilhanem.com üzerinden anlattığımız/yayınladığımız derslere bugün sizlere Realm Veritabanı Kullanımı nı anlatan bir uygulama yapacağım.
Realm açık kaynaklı veritabanı yönetim sistemidir. Realm veritabanı kullanımı kolay, sqlite veritabanına göre query oluşturma konusunda daha performanslı bir yapıya sahip. Dokümantasyon olarak gerçekten özenle hazırlanmış ve her ayrıntıya değinen bir anlatım da realm kendi sitesinde mevcut. Realm veritabanı ; Java, Swift, Objective-C, Javascript ve .NET gibi bir çok yazılıma da destek vermektedir.
Android Studio 3.1 versiyonu ile projemizi oluşturmaya başlayacağız eğer Android Studio nuz güncel değilse ve buradaki kaynak kodu indirip denemeye çalışırsanız hata alabilirsiniz.
Realm kullanabilmek için bazı ön koşullar bulunmaktadır :
- Android Studio 1.5.1 veya üstü
- JDK 7.0 veya üstü
- Güncel Android SDK sürümü
- Android API Level 9 ve üstü
Realm ile kullanılabilecek özellikler aşağıdaki şekilde yer almaktadır.
Android Studio da yeni bir proje oluşturuyoruz daha sonra proje seviyesindeki build.gradle dosyamızı aşağıdaki gibi düzenliyoruz. dependencies kısmında gördüğünüz gibi realm plugin kısmını tanımladık.
Project level: build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() google() } dependencies { classpath 'com.android.tools.build:gradle:3.1.0' classpath "io.realm:realm-gradle-plugin:5.0.0" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
Daha sonra uygulama seviyesinde bulunan build.gradle dosyamıza aşağıdaki kod parçacığını ekliyoruz.
apply plugin: 'realm-android'
Aşağıda gördüğünüz gibi ilgili kodu ekledik dependencies kısmında uygulamamızda kullanacağımız gerekli kütüphaneleri import ettik. Android Studio 3.1 güncellemesi ile artık “compile” yerine “implementation” kullandığımızı görüyorsunuz. ( not: 2018 sonu itibarı ile de artık compile kullanımı kalkacak o yüzden şimdilik compile ile kütüphaneleri çekseniz bile artık “implementation” ile kullanmaya dikkat edelim. )
build.gradle
apply plugin: 'com.android.application' apply plugin: 'realm-android' android { compileSdkVersion 25 buildToolsVersion '27.0.3' defaultConfig { applicationId "com.mobilhanem.realmdatabaseapp" minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "com.android.support:appcompat-v7:25.3.1" implementation "com.android.support:cardview-v7:25.3.1" implementation "com.android.support:design:25.3.1" implementation "com.android.support:recyclerview-v7:25.3.1" implementation "com.android.support:support-annotations:25.3.1" implementation "com.android.support:support-v4:25.3.1" testImplementation 'junit:junit:4.12' }
Şimdi Application sınıfımızı oluşturacağız. “denemeapp” ismini verdiğimiz Realm Veritabanı konfigürasyonunu aşağıda gördüğünüz gibi belirtiyoruz.
RealmApplication.java
package com.mobilhanem.realmdatabaseapp.apps; import android.app.Application; import io.realm.Realm; import io.realm.RealmConfiguration; /** * Created by alper on 27.03.2018. */ public class RealmApplication extends Application { @Override public void onCreate() { super.onCreate(); Realm.init(this); RealmConfiguration configuration = new RealmConfiguration.Builder().name("denemeapp.realm").deleteRealmIfMigrationNeeded().build(); Realm.setDefaultConfiguration(configuration); } }
Daha sonra oluşturduğumuz bu application sınıfını AndroidManifest.xml de tanımlamamız gerekiyor. application tag i içinde android:name de yarattığımız application sınıfını tanımladık.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mobilhanem.realmdatabaseapp"> <application android:name=".apps.RealmApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Projemizin genel olarak şablonu aşağıdadır. Kullanacağımız her modülü ayrı paketler altına tanımladık.
Şimdi uygulamamızda kullanacağımız model yapısını oluşturalım. Bu uygulamamızda kişiler üzerinden gideceğimiz için PersonTable adını verdiğimiz bir model oluşturuyoruz. Bu sınıfımızı RealmObject sınıfından extend ettik. Veritabanı işlemlerinde kullandığımız primary key kavramı burada da karşımıza çıkıyor aşağıda gördüğünüz gibi id değerimizi @PrimaryKey ile bu özelliği kazandırıyoruz. Daha sonra name, surname, department ve age gibi parametreleri de tanımladık. @RealmClass tagini kullanarak da oluşturduğumuz bu sınıfın Realm sınıfına ait olduğunu gösterdik.
PersonTable.java
package com.mobilhanem.realmdatabaseapp.model; import io.realm.RealmObject; import io.realm.annotations.PrimaryKey; import io.realm.annotations.RealmClass; /** * Created by alper on 27.03.2018. */ @RealmClass public class PersonTable extends RealmObject { @PrimaryKey private int id; private String name; private String surname; private String department; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
RecylerView de tanımladığımız CardView içinde bulunan iç noktaya tıklandığında tıklama eventini MainActivity de yakalayabilmek için bir Interface sınıfı oluşturduk.
IClickListener.java
package com.mobilhanem.realmdatabaseapp.interfaces; import android.view.View; public interface IClickListener { void onMenuClick(View view, int position); }
Adapter sınıfımızda kullanacağımız görsel kısmı oluşturan layout yapısı aşağıdadır
recylerview_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:id="@+id/card_view" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" card_view:cardCornerRadius="10dp" card_view:cardElevation="5dp" card_view:cardUseCompatPadding="true"> <LinearLayout android:id="@+id/topLayout" android:layout_margin="10dp" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="horizontal" android:weightSum="3" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Ad: " /> <TextView android:id="@+id/personName" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Address" /> <TextView android:id="@+id/textViewOptions" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="right" android:text="⋮" android:textAppearance="?android:textAppearanceLarge" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:weightSum="3" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Soyad: " /> <TextView android:id="@+id/personSurname" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Address" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:weightSum="3" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Yaş: " /> <TextView android:id="@+id/personAge" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Address" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:weightSum="3" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Bölüm: " /> <TextView android:id="@+id/personDepartment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:text="Address" /> </LinearLayout> </LinearLayout> </android.support.v7.widget.CardView> </RelativeLayout>
RecylerView bileşenimizi doldurmak için oluşturduğumuz adapter sınıfımızda aşağıdadır. RecylerView ile ilgili ayrıntılı bir anlatım burada yapmayacağım diğer derslerimde yeteri kadar bu konulara değindim. Tekrardan incelemek isteyenler bu dersimize bakabilirsiniz.
CustomAdapter.java
package com.mobilhanem.realmdatabaseapp.adapter; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.mobilhanem.realmdatabaseapp.R; import com.mobilhanem.realmdatabaseapp.interfaces.IClickListener; import com.mobilhanem.realmdatabaseapp.model.PersonTable; import java.util.List; public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { private Context context; private List<PersonTable> personList; private IClickListener clickListener; public class MyViewHolder extends RecyclerView.ViewHolder { public TextView personName, personSurname, personDepartment, personAge, personOptionMenu; public MyViewHolder(View view) { super(view); personName = (TextView) view.findViewById(R.id.personName); personSurname = (TextView) view.findViewById(R.id.personSurname); personDepartment = (TextView) view.findViewById(R.id.personDepartment); personAge = (TextView) view.findViewById(R.id.personAge); personOptionMenu = (TextView)view.findViewById(R.id.textViewOptions); personOptionMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clickListener.onMenuClick(v,getAdapterPosition()); } }); } } public CustomAdapter(Context mContext, List<PersonTable> personList, IClickListener clickListener) { this.context = mContext; this.personList = personList; this.clickListener = clickListener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.recylerview_item, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(final MyViewHolder holder, int position) { PersonTable personTable = personList.get(position); holder.personName.setText(personTable.getName()); holder.personSurname.setText(personTable.getSurname()); holder.personDepartment.setText(personTable.getDepartment()); holder.personAge.setText(String.valueOf(personTable.getAge())); } @Override public int getItemCount() { return personList.size(); } }
Görsel kısmında ise , kullanıcı ekleme yapacağı için EditText ler ve eklenen kullanıcıların gösterilebilmesi içinde RecylerView tanımladık.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.mobilhanem.realmdatabaseapp.MainActivity"> <LinearLayout android:id="@+id/topLayout" android:gravity="center_horizontal" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/personNameEdit" android:hint="Adınızı giriniz.." android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/personSurnameEdit" android:hint="Soyadınızı giriniz.." android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/personDepartmentEdit" android:hint="Bölümünüzü giriniz.." android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/personAgeEdit" android:hint="Yaşınızı giriniz.." android:inputType="number" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:gravity="center_horizontal" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/addBttn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Kaydet" android:onClick="addPerson" /> <Button android:id="@+id/dismissBttn" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Vazgeç" android:onClick="dissmisChange" /> </LinearLayout> </LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/topLayout" android:scrollbars="vertical" /> </RelativeLayout>
Şimdi MainActivity sınıfımızı inceleyelim;
MainActivity.java
package com.mobilhanem.realmdatabaseapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.PopupMenu; import android.widget.Toast; import com.mobilhanem.realmdatabaseapp.adapter.CustomAdapter; import com.mobilhanem.realmdatabaseapp.interfaces.IClickListener; import com.mobilhanem.realmdatabaseapp.model.PersonTable; import java.util.ArrayList; import java.util.List; import io.realm.Realm; import io.realm.RealmResults; public class MainActivity extends AppCompatActivity implements IClickListener { private Realm realm; private RecyclerView recyclerView; private EditText userNameEditText, userSurnameEditText, userAgeEditText, userDepartmentEditText; private Button addPersonButton, dismissButton; private CustomAdapter customAdapter; private List<PersonTable> personTables = new ArrayList<>(); private int pos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); realm = Realm.getDefaultInstance(); Init(); RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext()); recyclerView.setLayoutManager(mLayoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator()); customAdapter = new CustomAdapter(getApplicationContext(),personTables,MainActivity.this); recyclerView.setAdapter(customAdapter); refreshList(); } private void Init() { userNameEditText = (EditText)findViewById(R.id.personNameEdit); userSurnameEditText = (EditText)findViewById(R.id.personSurnameEdit); userDepartmentEditText = (EditText)findViewById(R.id.personDepartmentEdit); userAgeEditText = (EditText)findViewById(R.id.personAgeEdit); addPersonButton = (Button)findViewById(R.id.addBttn); recyclerView = (RecyclerView)findViewById(R.id.recycler_view); dismissButton = (Button)findViewById(R.id.dismissBttn); } public void addPerson(View view) { if(addPersonButton.getText().toString().equalsIgnoreCase("KAYDET")){ if(checkFields()){ realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Number maxId = bgRealm.where(PersonTable.class).max("id"); int nextId = (maxId == null) ? 1 : maxId.intValue() + 1; PersonTable personTable = bgRealm.createObject(PersonTable.class,nextId); personTable.setName(userNameEditText.getText().toString()); personTable.setSurname(userSurnameEditText.getText().toString()); personTable.setDepartment(userDepartmentEditText.getText().toString()); personTable.setAge(Integer.parseInt(userAgeEditText.getText().toString())); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "Kayıt başarılı bir şekilde eklendi.", Toast.LENGTH_SHORT).show(); refreshList(); clearAllFields(); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { Toast.makeText(MainActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show(); } }); }else{ Toast.makeText(MainActivity.this, "Gerekli alanları giriniz!", Toast.LENGTH_SHORT).show(); } }else{ if(checkFields()){ realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { RealmResults<PersonTable> realmResults = Realm.getDefaultInstance().where(PersonTable.class).findAll(); final PersonTable updateTable = realmResults.get(pos); updateTable.setName(userNameEditText.getText().toString()); updateTable.setSurname(userSurnameEditText.getText().toString()); updateTable.setDepartment(userDepartmentEditText.getText().toString()); updateTable.setAge(Integer.parseInt(userAgeEditText.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(); clearAllFields(); addPersonButton.setText("Kaydet"); dismissButton.setVisibility(View.GONE); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { Toast.makeText(MainActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show(); } }); } } } private void clearAllFields() { userNameEditText.setText(""); userSurnameEditText.setText(""); userDepartmentEditText.setText(""); userAgeEditText.setText(""); userNameEditText.setText(""); userNameEditText.setText(""); userNameEditText.setText(""); } private void refreshList() { RealmResults<PersonTable> realmResults = realm.where(PersonTable.class).findAll(); personTables.clear(); for(PersonTable personTable: realmResults){ personTables.add(personTable); } customAdapter.notifyDataSetChanged(); } private boolean checkFields() { if(userNameEditText.getText().toString().length()>0 && userSurnameEditText.getText().toString().length()>0 && userAgeEditText.getText().toString().length()>0 && userDepartmentEditText.getText().toString().length()>0 ){ return true; } return false; } private void fillAllFields(String name,String surname, String department, String age){ userNameEditText.setText(name); userSurnameEditText.setText(surname); userDepartmentEditText.setText(department); userAgeEditText.setText(age); } @Override public void onMenuClick(View view, final int position) { PopupMenu popup = new PopupMenu(getApplicationContext(), view); popup.inflate(R.menu.menu_item); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.editPersonItem: updatePerson(position); break; case R.id.deletePersonItem: deletePerson(position); break; } return false; } }); popup.show(); } private void updatePerson(int position) { RealmResults<PersonTable> realmResults = realm.where(PersonTable.class).findAll(); final PersonTable updateTable = realmResults.get(position); fillAllFields(updateTable.getName(),updateTable.getSurname(),updateTable.getDepartment(),String.valueOf(updateTable.getAge())); addPersonButton.setText("Güncelle"); dismissButton.setVisibility(View.VISIBLE); this.pos = position; } private void deletePerson(final int position) { realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { PersonTable personTable = personTables.get(position); personTable.deleteFromRealm(); refreshList(); } }); } public void dissmisChange(View view) { clearAllFields(); addPersonButton.setText("Kaydet"); dismissButton.setVisibility(View.GONE); } }
Yukarıdaki kodları ayırarak anlatmaya başlayalım; öncelikle kullanıcı Realm Veritabanına kişi eklemek isterse aşağıdaki kod parçacığı çalışacaktır. realm objesinin executeTransactionAsync methodu ile asekron bir işlem başlatmış oluyoruz. execute methodu içinde neler yapacağımızı yazıyoruz. Realm de veritabanı işlemlerinde auto increment bir yapı yoktur o yüzden kendi auto incerement yapımızı oluşturmak için aşağıdaki gibi bir yapı oluşturduk. Yarattığımız PersonTable modellerinede EditText lerde yer alan değerleri set ettik. Eğer kullanıcı ekleme işlemi başarılı olursa OnSuccess methodu tetiklenecektir. Eğer ekleme işleminde herhangi bir hata varsa da onError methodu tetiklenecektir.
Realm Veritabanı Ekleme İşlemi
realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Number maxId = bgRealm.where(PersonTable.class).max("id"); int nextId = (maxId == null) ? 1 : maxId.intValue() + 1; PersonTable personTable = bgRealm.createObject(PersonTable.class,nextId); personTable.setName(userNameEditText.getText().toString()); personTable.setSurname(userSurnameEditText.getText().toString()); personTable.setDepartment(userDepartmentEditText.getText().toString()); personTable.setAge(Integer.parseInt(userAgeEditText.getText().toString())); } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { Toast.makeText(MainActivity.this, "Kayıt başarılı bir şekilde eklendi.", Toast.LENGTH_SHORT).show(); refreshList(); clearAllFields(); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { Toast.makeText(MainActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show(); } });
Aşağıdaki kod parçasını incelediğimizde ise; yine asekron işlem başlatıyoruz. execute methodunda Realm.getDefaultInstance().where(PersonTable.class).findAll() bu kod ile kayıtlı olan bütün kullanıcıları çekiyoruz ve position değerine göre de istenilen kullanıcının kayıtlı olan değerlerini değiştirebiliyoruz.
Realm Veritabanı Güncelleme İşlemi
realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { RealmResults<PersonTable> realmResults = Realm.getDefaultInstance().where(PersonTable.class).findAll(); final PersonTable updateTable = realmResults.get(pos); updateTable.setName(userNameEditText.getText().toString()); updateTable.setSurname(userSurnameEditText.getText().toString()); updateTable.setDepartment(userDepartmentEditText.getText().toString()); updateTable.setAge(Integer.parseInt(userAgeEditText.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(); clearAllFields(); addPersonButton.setText("Kaydet"); dismissButton.setVisibility(View.GONE); } }, new Realm.Transaction.OnError() { @Override public void onError(Throwable error) { Toast.makeText(MainActivity.this, ""+error.getMessage(), Toast.LENGTH_SHORT).show(); } });
Realm Veritabanından kayıt silmek içinde aşağıdaki gibi bir yapı oluşturuyoruz. Listelenen veriler içinden silmek istediğimizin position değerini listeye verdiğimizde bize PersonTable tipinde bir model dönüyor daha sonra da dönen modeli deleteFromRealm methodu ile siliyoruz.
Realm Veritabanı Silme İşlemi
realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { PersonTable personTable = personTables.get(position); personTable.deleteFromRealm(); refreshList(); } });
Veritabanında bulunan bütün kayıtları silmek istersek ; yine bütün kayıtları çekiyoruz ve çekilen kayıtlar üzerinden deleteAllFromRealm methodunu tetikliyoruz.
final RealmResults<PersonTable> realmResults = realm.where(PersonTable.class).findAll(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { realmResults.deleteAllFromRealm(); } });
Uygulamamızda kayıtlı olan ve yaşı 27 olan kullanıcıyı bulmak istersek aşağıdaki sorgu yapısını oluşturmalıyız.
PersonTable person = Realm.getDefaultInstance().where(PersonTable.class).equalTo("age",27).findFirst();
Uygulamamızda kayıtlı olan kullanıcıları yaşa göre azalan sırada sıralamak istersek aşağıdaki sorgu yapısını oluşturmalıyız.
RealmResults<PersonTable> realmResults = Realm.getDefaultInstance().where(PersonTable.class).sort("age", Sort.DESCENDING).findAll();
Uygulamayı ilk çalıştırdığımızda karşımıza gelen ekran:
Herhangi bir kayıt ekledikten sonra oluşan ekran görüntümüz:
Eklenen herhangi bir kaydı güncellemek istediğimizde :
Kaynak kodu indirip, çalıştırmanızı öneririm ayrıca kodları temel olarak anlatmaya çalıştım umarım faydalı olmuştur. Realm Veritabanı kullanımının gördüğünüz gibi bir çok esnekliği ve kolaylığı mevcut. Bu dersimizde veritabanına kayıt ekleme, kayıt silme ve kayıt güncelleme gibi işlemleri gerçekleştirdik.
Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.
Mobilhanem.com üzerinden anlattığımız android 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..