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