본문 바로가기
Android Project/Extras..

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

by juwon2 2024. 1. 26.

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

 

 

먼저 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}를 작성하므로써 오류 코드를 확인할수있다

 

 

 

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

 

 

 

 

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

 

 

 

 

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