상세 컨텐츠

본문 제목

[안드로이드 코틀린] Database Room 사용법 part2 - 데이터 등록

안드로이드

by aries574 2022. 6. 25. 20:16

본문


 이번 시간에는 Room을 이용해서 DB에 데이터 등록하는 방법을 알아보겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.06.24 - [안드로이드] - [안드로이드 코틀린] Database Room 사용법 part1 - Room 설정

 

[안드로이드 코틀린] Database Room 사용법 part1 - Room 설정

안드로이드에서 앱 내부에 데이터를 관리하는 기능을 하는 Room 사용법에 대하여 알아보겠습니다. 이번 시간에는 기본 설정을 해보겠습니다. 아래 링크를 들어가시면 Room에 대한 상세한 정보를

aries574.tistory.com


목차

1. 실행 화면
2. 라이브러리 등록
3. 테마 변경 themes.xml
4. 등록 화면 만들기 InsertUserActivity
5. 메인 화면 구성 activity_main.xml
6. 메인 코드 구현 MainActivity.kt


1. 실행 화면


2. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'com.google.android.material:material:1.6.0'
kapt("androidx.room:room-compiler:$roomVersion")


3. 테마 변경 themes.xml

( res -> value -> themes)

 <style name="Theme.DBRoom" parent="Theme.MaterialComponents.DayNight.DarkActionBar">


4. 등록 화면 만들기 InsertActivity

app 선택 -> 마우스 오른쪽 클릭 -> New -> Activity -> Empty Activity

 액티비티명: InsertActivity

 - 설명 - 

 1. 이름과 나이 입력을 위한 EditText

 2. 데이터 저장을 하기 위한 Button

activity_insert.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".InsertActivity">

    <EditText
        android:id="@+id/name_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="이름"
        android:inputType="text"/>
    <EditText
        android:id="@+id/age_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/name_edit"
        android:hint="나이"
        android:inputType="number"/>

    <Button
        android:id="@+id/save_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/age_edit"
        android:layout_centerHorizontal="true"
        android:text="저장"/>
</RelativeLayout>

 

InsertActivity.kt

 - 설명 -

 1. String sName = nameEdit.getText().toString();
    String sAge = ageEdit.getText().toString();

    이름과 나이를 변수에 넣는다.

 2. insertUser(sName, sAge);

    입력한 정보를 insertUser()에 넘겨줌

 3. db.userDao().insertUser(user)

    DB 생성해서 입력한 정보 등록

 4. setResult(Activity.RESULT_OK)

     호출한 Activity에 값을 돌려준다.

class InsertActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_insert)

        val nameEdit: EditText = findViewById(R.id.name_edit)
        val ageEdit: EditText = findViewById(R.id.age_edit)
        val saveBtn: Button = findViewById(R.id.save_btn)

        saveBtn.setOnClickListener {

            val sName = nameEdit.text.toString()
            val sAge = ageEdit.text.toString()

            //사용자 등록
            insertUser(sName, sAge)
        }
    }

    private fun insertUser(name: String, age: String){

        val user = User(null, name, age)

        var db: AppDatabase? = AppDatabase.getDatabase(applicationContext)

        db?.userDao()?.insertUser(user)

        //상태값을 돌려준다.
        setResult(Activity.RESULT_OK)

        //액티비티 닫기
        finish()
    }
}


5. 메인 화면 구성 activity_main.xml

 - 설명 - 

 1. 사용자 리스트를 보여주기 위한 RecyclerView

 2. 사용자 등록 화면으로 넘어가기 위한 FloatingActionButton

 3.  아이콘 res -> drawable

ic_add.xml
0.00MB

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/insert_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="20dp"
        android:backgroundTint="@android:color/holo_green_dark"
        app:tint="@android:color/white"
        app:srcCompat="@drawable/ic_add"/>

</RelativeLayout>


6. 메인 코드 구현 MainActivity.kt

 - 설명 -

 1. loadUserList() 사용자 정보 조회 구현

 2. activityResult 사용자 등록 후 전달받은

   데이터에 의해 사용자 조회 기능 구현

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val insertBtn: FloatingActionButton = findViewById(R.id.insert_btn)
        insertBtn.setOnClickListener {
            val intent: Intent = Intent(this, InsertActivity::class.java)

            activityResult.launch(intent)
        }

        //사용자 조회
        loadUserList()
    }

    private val activityResult: ActivityResultLauncher<Intent> = registerForActivityResult(
        ActivityResultContracts.StartActivityForResult()){
        if(it.resultCode == RESULT_OK){
            //돌아온 값이 OK라면

            //사용자 조회
            loadUserList()
        }
    }

    //사용자 조회
    private fun loadUserList(){

        val db: AppDatabase? = AppDatabase.getDatabase(applicationContext)

        val userList: List<User> = db?.userDao()!!.getAllUser()

        if(userList.isNotEmpty()){

            val position: Int = userList.size -1

            Toast.makeText(this, "최근 등록자: " + userList.get(position).userName,
                Toast.LENGTH_SHORT).show()
        }else{
            Toast.makeText(this, "등록자 없음",
                Toast.LENGTH_SHORT).show()
        }
    }
}

2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

 

[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

사용자가 정한 시간에 알람이 울리게 하는 방법에 대하여 알아보겠습니다. 이번 시간에는 알람 관련 클래스와 설정들을 만들어 보겠습니다. 목차 1. 알람 클래스 만들기 NotificationHelper.kt 2. 

aries574.tistory.com

2022.06.06 - [안드로이드] - [안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성

 

[안드로이드 코틀린] 커스텀 달력 만드는 방법 part1 화면 구성

이번 시간부터 코틀린 버전 커스텀 달력을 만들어보겠습니다. 이번 포스팅은 화면 구성입니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 1. 실행 화면 2. dataB..

aries574.tistory.com

2022.06.14 - [안드로이드] - [안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

 

[안드로이드 코틀린] Tab Custom Animation part1 - 화면 구성 및 설정

앞으로 TabLayout을 직접 만들어 애니메이션 기능까지 넣어보도록 하겠습니다. 이번 시간에는 화면 구성 및 설정을 만들어 보겠습니다. 목차 1. 실행 화면 2. dataBinding 설정 build.gradle 3. 테마 변경 t

aries574.tistory.com

 

 

반응형

관련글 더보기

댓글 영역