Realm 사용하기

Kotlin Android DEVELOPMENT IT

프로젝트 수준의 gradle의 dependencies에 다음과 같이 추가

dependencies {
	classpath "io.realm:realm-gradle-plugin:5.2.0"
}

모듈 수준의 gradle 상단에 다음 코드 추가

apply plugin: "kotlin-kapt" //이 라인이 아래로 내려가면 apply plugin: "kotlin-kapt"
                            //이따위 에러가 발생할 수 있음
apply plugin: "realm-android"

Todo 모델 클래스 작성

//코틀린에서는 Realm에서 사용하는 클래스에 open 키워드를 추가한다.
//@PrimaryKey는 고유하며, Realm에서 제공하는 주석이다.
open class Todo(
		@PrimaryKey var id: Long = 0,
		var title: String = "",
		var date: Long = 0
) : RealmObject() {

}

생존코딩 399, 400페이지 참조

//새 객체 생성
var realm = Realm.getDefaultInstance()

private fun insertTodo() {
    realm.beginTransaction()

    val newItem = realm.createObject<Todo>(nextId())

    newItem.title = editText.text.toString()
    newItem.date = calendar.timeInMillis

    realm.commitTransaction()

    alert("내용이 추가되었습니다.") {
        yesButton { finish() }
    }.show()
}

//Realm에서는 key를 자동증가 해주는 기능이 없기에 수동으로 nextId를 가져와야함
private fun nextId(): Int {
    val maxId = realm.where<Todo>().max("id")
    if(maxId != null){
        return maxId.toInt() + 1
    }
    return 0
}
//모든 값을 얻으려면 where<Todo>() 메서드를 이용한다.
//이 메서드는 RealmQuery 객체를 반환하고 다음에 이어지는 조건을 수행한다.
//위의 코드에서는 max()를 조건으로 달았고, max()는 현재 id중 가장 큰 값을 얻을 때 사용한다.