web-dev-qa-db-ja.com

FireBaseデータベースのKotlin Coroutinesを使用する方法

FireStoreとCrooutinesを使用してチャットルームにアクセスしようとしています。

    fun getOwner() {
        runBlocking {
            var de = async(Dispatchers.IO) {
                firestore.collection("Chat").document("cF7DrENgQ4noWjr3SxKX").get()
            }
            var result = de.await().result
        }
 _

しかし、私はこのような誤りを得る:

E/AndroidRuntime: FATAL EXCEPTION: Timer-0
    Process: com.example.map_fetchuser_trest, PID: 19329
    Java.lang.IllegalStateException: Task is not yet complete
        at com.google.Android.gms.common.internal.Preconditions.checkState(Unknown Source:29)
        at com.google.Android.gms.tasks.zzu.zzb(Unknown Source:121)
        at com.google.Android.gms.tasks.zzu.getResult(Unknown Source:12)
        at com.example.map_fetchuser_trest.model.Repository$getOwner$1.invokeSuspend(Repository.kt:53)
 _

チャット文書を入手できますか?以下のように起源APIを使用すると、チャットルームの文書にアクセスできます。

        firestore.collection("Chat").document(
            "cF7DrENgQ4noWjr3SxKX"
        ).get().addOnCompleteListener { task ->
            if (task.isSuccessful) {
                val chatDTO = task.result?.toObject(Appointment::class.Java)
            }
        }
 _
10
ShutUpILoveYou
 val db = FirebaseFirestore.getInstance()
override suspend fun saveBinToDB(bin: Bin): Result<Unit> {
    lateinit var result:Result<Unit>
    db.collection("bins")
        .add(bin)
        .addOnSuccessListener { documentReference ->
            Log.d(TAG, "DocumentSnapshot written with ID: ${documentReference.id}")
            result = Result.Success(Unit)
        }
        .addOnFailureListener { e ->
            Log.w(TAG, "Error adding document", e)
            result = Result.Error(Exception())
        }
        .await()
    return result
}

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.3.7"
 _