Realm 이용한 Database 사용 예제
06 May 2019 | Android프로젝트 build.gradle
buildscript { ext.kotlin_version = '1.3.31' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.realm:realm-gradle-plugin:5.2.0" } }
모듈 build.gradle
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' ... dependencies { ... implementation 'io.realm:android-adapters:2.1.1' }
SnowApplication.kt
import android.app.Application import android.content.Context import io.realm.Realm import io.realm.RealmConfiguration class SnowApplication : Application() { companion object { private var instance: SnowApplication? = null fun context(): Context { return instance!!.applicationContext } } init { instance = this } override fun onCreate() { super.onCreate() Realm.init(this) Realm.setDefaultConfiguration(getRealmConfig()) } private fun getRealmConfig(): RealmConfiguration { return RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() .build() } }
데이터 레코드 정의
open
키워드를 이용해서 상속을 가능하게 해야 하며, RealmObject()
를 상속받아야 합니다.
import android.os.Parcel import android.os.Parcelable import io.realm.RealmObject import io.realm.annotations.PrimaryKey open class RewardDto( var habitId: Long = 0, var year: Int = 0, var month: Int = 0, var day: Int = 0, var percent: Int = 0, var stampType: Int = 0) : RealmObject() open class HabitDto( @PrimaryKey var id: Long = 0, var name: String = "", var seq: Long = 0) : RealmObject()
데이터 생성, 조회, 수정, 삭제
import com.snowdeer.htracker.model.data.HabitDto import io.realm.Realm import io.realm.Sort import io.realm.kotlin.createObject import io.realm.kotlin.where interface OnDatabaseEventListener { fun onDatabaseUpdated() } class HabitModelManager { companion object { val instance = HabitModelManager() } private constructor() private val realm = Realm.getDefaultInstance() private var onDatabaseEventListener: OnDatabaseEventListener? = null fun setOnDatabaseEventListener(l: OnDatabaseEventListener) { onDatabaseEventListener = l } fun notifyDatabaseUpdated() { onDatabaseEventListener?.onDatabaseUpdated() } private fun nextId(): Long { val maxId = realm.where<HabitDto>().max("id") if (maxId != null) { return maxId.toLong() + 1 } return 0 } private fun nextSeq(): Long { val maxSeq = realm.where<HabitDto>().max("seq") return maxSeq?.toLong()?.plus(1) ?: 0 } fun getList(): ArrayList<HabitDto> { val realmResult = realm.where<HabitDto>() .findAll() .sort("seq", Sort.DESCENDING) val list = ArrayList<HabitDto>() for (item in realmResult) { list.add(item) } return list } fun create(name: String) { realm.beginTransaction() val item = realm.createObject<HabitDto>(nextId()) item.name = name item.seq = nextSeq() realm.commitTransaction() notifyDatabaseUpdated() } fun update(id: Long, name: String, seq: Long) { realm.beginTransaction() val item = realm.where<HabitDto>().equalTo("id", id).findFirst()!! item.name = name item.seq = seq realm.commitTransaction() notifyDatabaseUpdated() } fun deleteWithReward(id: Long) { realm.beginTransaction() val item = realm.where<HabitDto>().equalTo("id", id).findFirst()!! item.deleteFromRealm() realm.commitTransaction() notifyDatabaseUpdated() } }