본문 바로가기
개발노트/Kotlin

파이널프로젝트 2주차 1일차

by 시계속세상은아직돌아가는중 2023. 10. 16.

 

1. firebase를 통한 로그인

 

       homeBtnLogin.setOnClickListener {
            val email = homeLoginEmail.text.toString()
            val password = homeLoginPassword.text.toString()
            auth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this@MainActivity) { task ->

                    if (task.isSuccessful) {
                        Toast.makeText(this@MainActivity, "ok", Toast.LENGTH_SHORT).show()
                        Toast.makeText(
                            this@MainActivity,
                            auth.currentUser?.uid.toString(),
                            Toast.LENGTH_SHORT
                        ).show()

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

                    } else {
                        Toast.makeText(this@MainActivity, "no", Toast.LENGTH_SHORT).show()

                    }
                }
        }
    }

공식 문서를 참고해서 그대로 넣은 형태다.

서버에서 아이디와 비밀번호가 맞는지 체크를 해서 로그인을 해주는 형태다.

 

edittext에서 email과 password를 받아서 대조한다.

 

2. firebase

 

class FireBaseRepoImpl(

) : FireBaseRepo {

    override fun getData(): LiveData<List<FireModel>> {

        val resultLiveData = MutableLiveData<List<FireModel>>()

        val database = Firebase.database
        val myRef = database.getReference("borad")

        myRef.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {

                val dataList = mutableListOf<FireModel>()

                if (snapshot.exists()) {
                    for (userSnapshot in snapshot.children) {
                        val itemKey = userSnapshot.key ?: ""
                        val getData = userSnapshot.getValue(Model::class.java)

                        getData?.let { model ->

                            val fireModel =
                                FireModel(
                                    key = itemKey,
                                    title = model.title
                                )

                            dataList.add(fireModel)
                        }
                    }

                    resultLiveData.postValue(dataList)
                }
            }

            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }

        })

        return resultLiveData
    }

    override fun deleteItem(item: FireModel) {
        val database = Firebase.database
        val myRef = database.getReference("borad")
        myRef.child(item.key).removeValue()
    }

    override fun addItem(title: String) {
        val database = Firebase.database
        val myRef = database.getReference("borad")

        myRef.push().setValue(
            Model(title = title)
        )
    }

}

 

firebase는 자체적인 key값을 부여하여 해당 데이터에 접근이 가능하다.

해당하는 값은 json형태를 다시 직렬화-역직렬화 관계로 해줘야 하므로 이에 대한 데이터 클래스 설계가 생각보다 까다로웠다.

 

3.room의 호환

 

코틀린 1.9.0에서 suspend fun을 사용할 시 room 2.5.0에서는 대응이 되지 않기 때문에 에러가 발생한다

따라서 코틀린 버전을 1.8.20으로 낮추거나 room 버전을 2.6.0-rc01로 높여야한다.

 

안정화된 버전을 사용하기 위해 코틀린 버전을 1.8.20으로 낮춰서 작업하는 것이 좋겠으나

현재 소규모 프로젝트에서 다같이 초기에 1.9.0으로 맞췄기 때문에 room버전을 2.6.0-rc01로 높이고 오류 케이스가 발생할 때 마다 픽스하는 것이 더 현명해보였다.

 

나 혼자 진행하는 프로젝트면 상관이 없으나 다른 3명의 코드에도 영향이 갈 수 있기 때문이다.

 

 

 

참고 링크

https://zoown13.medium.com/firebase-realtime-database-%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%84%EB%B0%98%EC%A0%81%EC%9D%B8-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95-%EC%86%8C%EA%B0%9C-1-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%93%B0%EA%B8%B0-33042a113ad4

 

Firebase Realtime Database(파이어베이스 실시간 데이터베이스) 전반적인 사용방법 소개 (1) 데이터 쓰

​https://youtu.be/iosNuIdQoy8

zoown13.medium.com

https://zoown13.medium.com/firebase-realtime-database-%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-2-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%9D%BD%EA%B8%B0-a3f349640f4c

 

Firebase Realtime Database(파이어베이스 실시간 데이터베이스) (2) 데이터 읽기

이전글

zoown13.medium.com

https://zoown13.medium.com/firebase-realtime-database-%ED%8C%8C%EC%9D%B4%EC%96%B4%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-3-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%BF%BC%EB%A6%AC-cedf2d6e1184

 

Firebase Realtime Database(파이어베이스 실시간 데이터베이스) (3) 데이터 쿼리

이번 글에서는 파이어베이스 실시간 데이터베이스(줄여서 RDB라 하자)를 이용할 시 데이터를 쿼리하는 방법과 이전에 소개하지않은 데이터를 추가하고 변경하는 방법을 소개하려고 한다. 데이

zoown13.medium.com