본문 바로가기

개발 노트/Kotlin

[Android/Kotlin] 파이어베이스 CRUD 만들기 (2) - 사용자 등록

저번시간에는 프로젝트 만들고 파이어베이스 연동을 해봤고, 이번에는 이름과 나이를 적어서 버튼을 누르면 등록해보는 예제 코드를 짜볼것이다

 

 

먼저 viewbinding 설정을 할것이다

viewbinding 설정을 하는 이유는 findviewbyid없이 뷰 객체를 사용하기 위해서다

viewbinding을 사용함으로써 뷰객체에 바로 접근할수있다

 

build.gradle(app)에서 kotlinOptions 밑에 아래와같이 코드를 작성해준뒤 sync now를 눌러주면 viewbinding을 사용할수있게 된다

buildFeatures{
    viewBinding = true
}

 

 

 

이제 사용자 정보를 담을 사용자 모델 클래스를 생성해준다

User.kt 파일을 생성해준다 (클래스 타입은 Data class로 생성) 

constructor이라는 기본 생성자를 만들어준다

package com.example.firebasecrud

data class User(
    var userKey : String,   //사용자키값(구분값)
    var userName : String,  //사용자이름
    var userAge : String    //사용자나이
){
    constructor() : this("","","")
}

User.kt

 

생성자를 아래와 같은 방식으로 표현할수도있다

package com.example.firebasecrud

data class User(
    var userKey : String = "",   //사용자키값(구분값)
    var userName : String = "",  //사용자이름
    var userAge : String = ""   //사용자나이
)

User.kt

 

 

 

이제 실시간 데이터베이스와 연결해줄 클래스를 생성해준다

package com.example.firebasecrud

import com.google.android.gms.tasks.Task
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase

// 실시간 데이터베이스와 연결해줄 클래스 생성

class UserDao {

    private var databaseReference : DatabaseReference? = null


    // init안에 있는 코드 = UserDao 객체 생성시에 바로 실행될 코드
    init {
        val db = FirebaseDatabase.getInstance()
        //FirebaseDatabase에 있는 user에 저장
        databaseReference = db.getReference("user")
    }

    // 사용자 등록함수
    // 사용자 정보를 전달받아 실시간 데이터베이스에 저장
    fun add(user : User?) : Task<Void>{
        // databaseReference객체를 통해서 push(값을넣어줌)를 해주는데, user값을 넣어줌
         return databaseReference!!.push().setValue(user)
    }

}

UserDao.kt

 

 

메인화면 디자인을 해줄것이다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <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:hint="나이"
        android:inputType="number"/>

    <Button
        android:id="@+id/add_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="등록"
        android:textSize="25sp"/>

</LinearLayout>

activity_main.xml

LinearLayout으로 레이아웃을 설정했으면 orientation을 추가해줘야한다. 세로로 할것이기때문에 orientation을 vertical로 설정해준다

메인화면에는 이름과 나이를 입력받을 EditText와, 사용자 등록기능을 할 Button을 만들어 디자인해준다

이름적는부분에는 문자, 나이적는부분은 숫자만 받도록 inputType을 통해 형식을 지정해준다

 

activity_main.xml

 

 

 

이제 MainAcivity.kt 으로 가서 메인코드를 구현해보겠다

package com.example.firebasecrud

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.firebasecrud.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    // viewbinding객체 생성
    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
    }
}

MainActivity.kt

일단 viewbinding객체를 생성해준다. 이게 viewbinding의 기본틀이기때문에 먼저 이렇게 만들어놓고 코드를 더 추가해준다

 

 

package com.example.firebasecrud

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.firebasecrud.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    // viewbinding객체 생성
    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 데이터베이스 클래스 객체생성
        val dao = UserDao()


        // addBtn 눌렀을때
        binding.addBtn.setOnClickListener {

            // 입력값 변수에 담기
            val name = binding.nameEdit.text.toString()  //이름   //binding을 사용해서 nameEdit값을 가져오는데 String값으로 바꿔서 가져옴
            val age = binding.ageEdit.text.toString()    //나이   //binding을 사용해서 ageEdit값을 가져오는데 String값으로 바꿔서 가져옴

            // 입력값을 담은변수를 User클래스에 담기(데이터 세팅)
            val user = User("", name, age)  // userKey,userName,userAge

            // 위에 세팅된 값을 데이터베이스에 전송한다음 등록
            dao.add(user)?.addOnSuccessListener {
                // 데이터가 성공적으로 들어갔을때
                Toast.makeText(this, "등록 성공!", Toast.LENGTH_SHORT).show()

            }?.addOnFailureListener {
                // 데이터 등록이 실패했을때
                Toast.makeText(this, "등록 실패 : ${it.message}", Toast.LENGTH_SHORT).show()

            }

        }

    }
}

MainActivity.kt

아까 viewbinding에서 코드를 더 추가해주었다. 이게 최종적인 MainActivity코드이다

 

addBtn버튼 눌렀을때 작동하는 코드를 보면, binding을 통해서 뷰객체에 바로 접근할수있다

데이터 등록에 실패했을때 토스트메시지를 보면 ${it.message}를 작성하므로써 오류 코드를 확인할수있다

 

 

 

최종적으로 앱 작동화면이다!

 

 

 

 

이렇게 이름,나이를 입력하고 등록버튼을 누르면 파이어베이스 실시간 데이터베이스에도 바로 적용이 되는것을 볼수있다

 

 

 

 

[유튜버 "만들면서 배워가는 프로그래머"님 영상 참고]