[Firebase] 의 RealTime DB 사용

728x90

🟦 Firebase의 RealTime DB 사용하기

▶️ 유저 정보를 DB에 저장

  • 회원 가입 시, User 정보를 RealTime DB 안에 저장

🟧 JoinActivity.kt

  • 회원 가입 시도할 당시, 사용자가 입력한 정보들을 차례로 DB에 쓰기 시도한다.
  • 처리의 편의를 위해, Auth 폴더에 UserDataModel 객체 규격으로 User 데이터를 저장할 것이다.
  • FirebaseRef 내부에서 userInfoRef 에 대한 규격 뿌리는 userInfo 라는 경로로 설정하여 DB에 저장한다.
package com.example.myapplication.auth

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import com.example.myapplication.MainActivity
import com.example.myapplication.databinding.ActivityJoinBinding
import com.example.myapplication.utils.FirebaseRef
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.database.ktx.database
import com.google.firebase.ktx.Firebase
import org.w3c.dom.Text

class JoinActivity : AppCompatActivity() { //회원가입

    lateinit var binding : ActivityJoinBinding

    private lateinit var auth: FirebaseAuth
    //DB 에 저장할 데이터 변수들
    private var nickname = ""
    private var gender = ""
    private var city = ""
    private var age = ""
    private var uid = ""

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

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

        auth = Firebase.auth

        //회원가입 버튼 클릭 시 이벤트 처리
        binding.joinBtn.setOnClickListener {

            val email = binding.emailArea
            val pwd = binding.pwdArea

            gender = binding.genderArea.text.toString()
            city   = binding.cityArea.text.toString()
            age = binding.ageArea.text.toString()
            nickname = binding.nicknameArea.text.toString()

            auth.createUserWithEmailAndPassword(email.text.toString(), pwd.text.toString())
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        Log.d("test", "성공 ")

                        //회원 uid값 받아오기
                        val user = auth.currentUser

                        uid = user?.uid.toString()

                        val userModel = UserDataModel( //사용자 정보 데이터 객체
                            uid,
                            nickname,
                            age,
                            gender,
                            city
                        )

                        //DB에 쓰기
                        FirebaseRef.userInfoRef.child(uid).setValue(userModel)

                        val intent = Intent(this, MainActivity::class.java)
                        startActivity(intent)

                    } else {
                        Log.d("test", "실패")
                    }
                }
        }
    }
}

🟦 유저 정보를 DB에서 받아와서 화면에 처리

▶️ DB에서 받아온 회원 정보로 화면 세팅

🟧 (1) MainActivity.kt

  • 이곳에서 회원들의 회원 정보 얻어와야 함
  • fun getUserDataList() 메소드 안에서 처리하고 OnCreate() 내부에서 실행한다.
  • MainActivity 내부의 getUserDataList() 메소드
//DB에서 회원정보 받아오는 부분
    private  fun getUserDataList() {
        val postListener = object : ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {

                for(dataModel in dataSnapshot.children) {

                    val user = dataModel.getValue(UserDataModel::class.java)
                    usersDataList.add(user!!)
                }

                cardStackAdapter.notifyDataSetChanged()
            }

            override fun onCancelled(databaseError: DatabaseError) {
                // Getting Post failed, log a message
                Log.w("test", "loadPost:onCancelled", databaseError.toException())
            }
        }

        FirebaseRef.userInfoRef.addValueEventListener(postListener)
    }

}

🟧 (2) 데이터로 화면 세팅

  • 1) userDataList 변수 생성
private val usersDataList = mutableListOf<UserDataModel>()
  • 2) 이 데이터들을 다시 Adapter에 넘겨준다.
cardStackAdapter = CardStackAdapter(baseContext, usersDataList)
cardStackView.layoutManager = manager
cardStackView.adapter = cardStackAdapter
  • 3) ViewHolder 의 binding 함수에서 화면 세팅 처리
//뷰 홀더 클래스
    inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        //우선 화면에 띄워줄 뷰 데이터 가져옴
        var nickname = itemView.findViewById<TextView>(R.id.itemNickname)
        var age = itemView.findViewById<TextView>(R.id.itemAge)
        var city = itemView.findViewById<TextView>(R.id.itemCity)

        //binding으로 화면에 데이터 처리 위함
        fun binding(data: UserDataModel) {
            //파이어베이스의 Realtime DB 데이터셋에서 받아뒀던 데이터 모델의 데이터들을 하나씩 받아서 처리

            nickname.text = data.nickname
            age.text = data.age
            city.text = data.city
        }
    }
}

🟦 핸드폰 이미지 불러오기

▶️ 휴대폰 이미지를 불러오기

  • Firebase의 Stoarge 사용
728x90