Closed12
android で amplify を使う

Amplify.Auth.signIn(
username,
password,
{ result ->
Log.i(
"AuthQuickstart",
if (result.isSignInComplete) "Sign in succeeded" else "Sign in not complete"
)
},
{ error -> Log.e("AuthQuickstart", error.toString()) }
)
このままだと処理の完了をとるのがめんどくさい
coroutine とかつかっていい感じに書きたい

(coroutine よくわかってないけど)

coroutine

同じ気持ちの人たち

https://qiita.com/offwhite/items/94540e7cc3b330507c9c coroutine わかりやすそう

力技

package com.example.appsyncsample.app.repository
import com.amplifyframework.core.Amplify
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
sealed class Result<out R> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
}
class LoginRepository {
suspend fun makeLoginRequest(username: String, password: String): Result<String> {
return suspendCoroutine { continuation ->
Amplify.Auth.signIn(
username,
password,
{ res ->
val result =
Result.Success(if (res.isSignInComplete) "Sign in succeeded" else "Sign in not complete")
continuation.resume(result)
},
{ error ->
val result = Result.Error(Exception(error.toString()))
continuation.resume(result)
}
)
}
}
}
通った

continuation.resume
が呼ばれるまで suspendCoroutine
が待ってくれて、 continuation.resume(result)
の result
を return してくれる。
ただ、まだ suspendCoroutine
の仕様は理解してない。どこでブロックされてるみたいな

記事にした

よさげ

よさげ

suspendCoroutine
の話
このスクラップは2021/01/05にクローズされました