본문 바로가기
Android

[Android] Firebase에서 코루틴을 사용해보자! (feat.Firestore)

by 안솝우화 2022. 3. 11.
반응형

Firebase를 사용하면서 어떠한 동작을 순서대로 하고 싶은데 그 동작이 언제 끝날지는 모르겠고.. 난감한 상황이 다들 있으셨나요??! (전 있었습니다..ㅠ)

이때 코루틴을 활용하려 했는데 도대체 Firebase와는 어떻게 써야 하는지 잘 모르겠더라고요.. 그러다가 Firebase에 코루틴을 지원하는 종속성을 찾았습니다

아래 kotlinx-coroutines가 바로 그 주인공입니다!

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1'

 

위의 주인공을 알기 전에 반복문으로 firestore에 값을 저장하려면 어떻게 했어야 했을까요??

	fun firebaseCall(data : ArrayList<Test>){
            for (n in 0 until data.size){
                fireStore.collection("test").document("test").set(data[n])
            }
    }

 

이렇게 하면 되려나..? 그런데 모두 다 저장됐는지는 어떻게 알지..? 이게 맞는 건가;; 

 

하지만 오늘의 주인공을 활용하면 이야기가 달라집니다!!

	suspend fun firebaseCall(data : ArrayList<Test>) : Boolen {
        return try {
            for (n in 0 until data.size){
                fireStore.collection("test").document("test").set(data[n]).await()
            }
            true
        }catch (e : Exception){
            false
        }
    }

 

이 코드에서 핵심은 바로 await()입니다. 기존에 addOnSuccessListener로 성공했을 때 호출했다면 await()는 작업이 끝날 때까지 멈춥니다 (코루틴 await와 같은 개념)
그래서 순서대로 작업이 가능하고 두 개 작업 모두 성공했을 때 true를 또는 하나 라도 실패하면 false를 반환하게 됩니다

 

 

또 다른 사용방법의 예시입니다!
사용방법은 바로 아래 코드로 확인해 보겠습니다

    suspend fun firebaseCall(test1 : String, test2 : String): Boolean {
        return try {
            fireStore.collection("project").document("test1").set(test1)
                .await()
            fireStore.collection("project").document("test2").set(test2)
                .await()
            true
        }catch (e : Exception){
            false
        }
    }

 

이렇게 쉽게 처리해줄 수 있는 거였다면 진작 알았으면 편했을텐데//;

 

추가로

안드로이드 개발에 대한 질문과 정보 등을 공유 및 소통하는 채팅방입니다

https://open.kakao.com/o/gG5PueVd

반응형