라이브러리 의존성 설정
build.gradle
// kotlin annotation processing tool
apply plugin: 'kotlin-kapt'
dependencies {
implementation 'android.arch.persistence.room:runtime:1.0.0-rc1'
kapt 'android.arch.persistence.room:compiler:1.0.0-rc1'
}
DB에 저장할 모델 만들기
LocationResultModel.kt
- 위치 정보 정확도 파악을 위해 위치 데이터를 저장하는 모델을 만들었다.
@Entity(tableName = "location_result")
data class LocationResult (
val provider : String,
val latitude : Double,
val longitude : Double,
val accuracy : Double,
@ColumnInfo(name = "create_date_time")
val createDateTime : String) {
@PrimaryKey(autoGenerate = true)
var id: Long = 0
}
DAO 만들기
LocaionResultDao.kt
- 데이터 조회/추가/수정/삭제를 하는 dao를 생성했다.
@Dao
interface LocationResultDao {
@Query("SELECT * FROM location_result")
fun findAll(): List<LocationResult>
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun create(locationResult: LocationResult)
@Update
fun update(locationResult: LocationResult)
@Delete
fun delete(locaionResult: LocationResult)
}
Database 클래스 정의
Database.kt
- entity클래스, version, schema export option등을 정의한다.
@Database(entities = arrayOf(LocationResult::class), version = 1, exportSchema = false)
abstract class Database : RoomDatabase() {
abstract fun locationResultDao(): LocationResultDao
}
database 객체 생성
- Application 객체에 싱글톤으로 정의
ApplicationImpl.kt
class ApplicationImpl : Application() {
companion object {
private lateinit var INSTANCE: ApplicationImpl
fun getInstance() = INSTANCE
lateinit var database: Database
}
override fun onCreate() {
super.onCreate()
INSTANCE = this
database = Room.databaseBuilder(this, Database::class.java, "location-result-db").build()
}
}
DB에 데이터 추가/조회하기
데이터 추가
async {
ApplicationImpl.database.locationResultDao().create(LocationResult("Fused", location.latitude, location.longitude, 0.0, getCurrentDateTime()))
}
데이터 조회
async {
val result = ApplicationImpl.database.locationResultDao().findAll()
Log.d("LocationSample", result.toString())
}