경험의 기록

파이어베이스에서 Firestore 를 사용하면 쉽게 데이터를 쓰고 읽을 수 있다.

2021.04.11 - [안드로이드 스튜디오/기본] - [Android Studio] 파이어베이스 연결 후 로그인 구현하기

 

[Android Studio] 파이어베이스 연결 후 로그인 구현하기

1. 파이어베이스와 프로젝트 연결하기 firebase.google.com/?hl=ko Firebase Firebase는 고품질 앱을 빠르게 개발하고 비즈니스를 성장시키는 데 도움이 되는 Google의 모바일 플랫폼입니다. firebase.google.com..

hanyeop.tistory.com

파이어베이스가 연결되있지 않다면 연결해야한다.

 

firebase.google.com/docs/firestore/quickstart?authuser=0#kotlin+ktx

 

Cloud Firestore 시작하기  |  Firebase

이 빠른 시작에서는 Cloud Firestore를 설정하고 데이터를 추가한 후 Firebase Console에서 방금 추가한 데이터를 확인하는 방법을 볼 수 있습니다. Cloud Firestore 데이터베이스 만들기 Firebase 프로젝트를

firebase.google.com

구글 문서에서 더 많은 정보를 확인할 수 있다.


1. 데이터 쓰기

 

implementation 'com.google.firebase:firebase-firestore-ktx'

Firestore를 활성화 시켜주고, firebase-bom 이 추가되있다면 ktx를 추가하고,

implementation 'com.google.firebase:firebase-firestore-ktx:22.1.1'

firebase-bom을 사용하지 않는다면 버전을 확인하여 추가해주면 된다.

 

 

var auth : FirebaseAuth? = null
var firestore : FirebaseFirestore? = null

그 후에 유저정보를 가져오기 위한 auth,

firestore를 추가해주고

auth = Firebase.auth
firestore = FirebaseFirestore.getInstance()

onCreate 에서 초기화해준다.

 

data class ResultDTO (
    var uid :String? = null,
    var textOne : String? = null,
    var textTwo : String? = null,
    var timestamp : Long? = null
)

넘기고 싶은 정보를 담기위한 데이터클래스를 만들어준다.

 

 

saveButton.setOnClickListener {
            var resultDTO = ResultDTO()
            resultDTO.uid = auth?.currentUser?.uid
            resultDTO.textOne = writeOne.text.toString()
            resultDTO.textTwo = writeTwo.text.toString()
            resultDTO.timestamp = System.currentTimeMillis()

            firestore?.collection(auth!!.currentUser!!.uid)?.document()?.set(resultDTO)
            Toast.makeText(this,"저장완료",Toast.LENGTH_SHORT).show()
        }

저장하고 싶은 값을 적어 collection에 넘겨준다.

document의 ( )에 아무것도 적지 않으면 랜덤한 이름으로 저장하고 이름을 적으면 그 이름으로 저장한다.

uid 이름대로 컬렉션을 관리하여 출력할 것이다.

 

이제 규칙에서

if request.auth.uid != null;

를 조건으로 추가해준다.

 

데이터가 잘 추가 되었다.

 

 

 


2. 데이터 읽기

데이터를 읽기 원하는 액티비티에서

private var firestore : FirebaseFirestore? = null
private var uid : String? = null

추가해주고

uid = FirebaseAuth.getInstance().currentUser?.uid
firestore = FirebaseFirestore.getInstance()

초기화해준다.

 

 

여기서 예시로 리싸이클러뷰에 모든 데이터를 읽어와서 보여주려고 한다.

 

inner class ResultViewRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
        var resultDTOs: ArrayList<ResultDTO> = arrayListOf()

        init {
            firestore?.collection(uid!!)?.orderBy("timestamp", Query.Direction.DESCENDING)
                ?.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
                    resultDTOs.clear()
                    if (querySnapshot == null) return@addSnapshotListener

                    // 데이터 받아오기
                    for (snapshot in querySnapshot!!.documents) {
                        var item = snapshot.toObject(ResultDTO::class.java)
                        resultDTOs.add(item!!)
                    }
                    notifyDataSetChanged()
                }
        }

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
            var view =
                LayoutInflater.from(parent.context).inflate(R.layout.item_result, parent, false)
            return CustomViewHolder(view)
        }

        inner class CustomViewHolder(view: View) : RecyclerView.ViewHolder(view) {

        }

        override fun getItemCount(): Int {
            return resultDTOs.size
        }

        override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
            var viewHolder = (holder as CustomViewHolder).itemView

            viewHolder.resultTextOne.text = resultDTOs!![position].textOne
            viewHolder.resultTextTwo.text = resultDTOs!![position].textTwo

        }
    }

어댑터로 사용하기 위해 RecyclerView.Adapter<RecyclerView.ViewHolder>를 상속받은 클래스를 추가해준다.

결과들을 받을 ArrayList를 만들어주고

시간 기준으로 오름차순으로 자신의 아이디에 맞는 컬렉션의 결과들을 불러와서 바인드해준다.

 

resultView.adapter = ResultViewRecyclerViewAdapter()
resultView.layoutManager = LinearLayoutManager(this)

만든 커스텀 어댑터를 연결해준다.

결과창에서 데이터가 잘 불러와진 것을 확인할 수 있다.

 

 

github.com/HanYeop/AndroidStudio-Practice/tree/master/Firebase_test

 

HanYeop/AndroidStudio-Practice

AndroidStudio Practice. Contribute to HanYeop/AndroidStudio-Practice development by creating an account on GitHub.

github.com

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading