인프런 커뮤니티 질문&답변

shafeel2님의 프로필 이미지
shafeel2

작성한 질문수

모던 안드로이드 - 코틀린과 Jetpack 활용

[Kotlin] DB를 이용한 데이터 저장 방법 Room

Room db kotlin 관련질문

작성

·

172

·

수정됨

0

우선 강사님의 강의내용을 dataBinding 과 viewBinding을 적용해 코드를 바꾸니

실행이 않되고 앱이 죽는군요

해당 파일들을 git 에 올려두었습니다

https://github.com/dongguntechnology/db_Room2

 

buildFeatures {
dataBinding = true
viewBinding = true
}

 

답변 2

0

shafeel2님의 프로필 이미지
shafeel2
질문자

project build.gradle.kts

plugins {
id("com.android.application") version "8.2.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
kotlin("kapt") version "1.9.21"
}

Module 수준의 build.gradle.kts

plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.kapt")
}

android {
namespace = "com.dongguninnovatiion.db_room2"
compileSdk = 34

defaultConfig {
applicationId = "com.dongguninnovatiion.db_room2"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
getByName("debug") {
sourceSets {
getByName("main") {
java.srcDir(File("build/generated/ksp/debug/kotlin"))
}
}
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}

buildFeatures {
dataBinding = true
viewBinding = true
}
}

dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

val roomVersion = "2.6.1"
implementation ("androidx.room:room-runtime:$roomVersion")
annotationProcessor ("androidx.room:room-compiler:$roomVersion")

// opt
ional - RxJava2 support for Room
implementation ("androidx.room:room-rxjava2:$roomVersion")

//
optional - RxJava3 support for Room
implementation ("androidx.room:room-rxjava3:$roomVersion")

// optional - Guava support for Room, including Optional and ListenableFuture
implementation ("androidx.room:room-guava:$roomVersion")

// optional - Test helpers
testImplementation ("androidx.room:room-testing:$roomVersion")

// optional - Paging 3 Integration
implementation ("androidx.room:room-paging:2.4.0-rc01")

}

MainActivity.kt

class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding

private lateinit var db: TodoDatabase

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

val db = Room.databaseBuilder(
applicationContext,
TodoDatabase::class.java,"Todo"
).allowMainThreadQueries().build()

binding.addBtn.setOnClickListener{
addTodo()
refreshTodo()
}
}


private fun addTodo() {
val t1 = binding.todoEdit.text.toString()

Co
routineScope(Dispatchers.IO).launch {
db.todoDao().insert(Todo(t1))
}
}

private fun refreshTodo() {
CoroutineScope(Dispatchers.Main).launch {
val da
ta = CoroutineScope(Dispatchers.IO).async {
db.todoDao().getAll().toString()
}.await()

if(data != null) {
// binding.resultText.setText("${data.toString()}")
}
}
}
}

 

 

 

이렇게 수정하여도 앱이 죽는군요

 

 

오준석님의 프로필 이미지
오준석
지식공유자

주신 코드 그대로 제가 언급한 두 부분만 고쳤습니다

그런데 지금 다시 보내주신 코드는 gradle 쪽에 많은 수정이 있는 것 같습니다.

예전 groovy 버전의 코드가 섞여 있는 것도 같습니다.

0

오준석님의 프로필 이미지
오준석
지식공유자

먼저 최상위 build.gradle.kts 에서 annotationProcessor 를 kapt 로 고칩니다.

annotationProcessor 는 Java 프로젝트에서 사용하고 kotlin 에서는 kapt 또는 KSP 를 사용하는데 일단 실행 되게 하는 것에만 집중해서 kapt 로 수정하세요. 아마 KSP로 마이그레이션 하라고 경고가 뜰 건데 무시하시지요.

image

그 다음으로는 MainActivity 에 이상한 코드가 있습니다.

31번 라인을 제거하면 실행이 잘 됩니다.

image

오준석님의 프로필 이미지
오준석
지식공유자

해결의 힌트는 Logcat 에 에러메시지를 구글링하여 얻을 수 있었습니다

shafeel2님의 프로필 이미지
shafeel2

작성한 질문수

질문하기