반응형
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
}
}
이렇게 쉽게 처리해줄 수 있는 거였다면 진작 알았으면 편했을텐데//;
추가로
안드로이드 개발에 대한 질문과 정보 등을 공유 및 소통하는 채팅방입니다
반응형
'Android' 카테고리의 다른 글
Kotlin DSL을 Kotlin DSL답게 사용하기! (0) | 2022.08.11 |
---|---|
RecyclerView + DiffUtil를 이용해 보자! (feat.Kotlin) (0) | 2022.04.13 |
[Jetpack compose] Text를 사용해 보자! (0) | 2022.03.03 |
[Android] Library를 만들고 JitPack으로 배포해보자! (0) | 2021.12.30 |
[Android] 쉽고 간편한 Dagger Hilt를 사용해 보자! (0) | 2021.12.29 |