@h1_0ne

Как дождаться выполнения функции в Kotlin?

У меня есть функция, которая по идее должна возвращать результат того, прошла ли биометрическая проверка или нет
fun fingerPrintResult():Boolean
    {
        val executor = Executors.newSingleThreadExecutor()
        val activity: FragmentActivity = this // reference to activity

        var resultReturn:Boolean = false

        val biometricPrompt = BiometricPrompt(activity, executor, object : BiometricPrompt.AuthenticationCallback() {

            override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                super.onAuthenticationError(errorCode, errString)
                resultReturn = false
            }

            override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                super.onAuthenticationSucceeded(result)
                resultReturn = true
            }

            override fun onAuthenticationFailed() {
                super.onAuthenticationFailed()
                resultReturn = false
            }
        })

        val promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle("Подтвердите личность")
            .setNegativeButtonText("Negative Button")
            .build()

         biometricPrompt.authenticate(promptInfo)

        return resultReturn
    }

Я ее вызываю в одной из кнопок OnItemClickListener
ad.setNegativeButton("Удалить", object : DialogInterface.OnClickListener {
                    override fun onClick(dialog: DialogInterface, arg1: Int) {

                        var isTrue: Boolean = false

                        isTrue = fingerPrintResult()

                        if(!isTrue)
                        {
                            Toast.makeText(applicationContext,"Error!", Toast.LENGTH_SHORT).show()
                            return
                        }

                        var value = item["id"].toString()
                        var db = DBHandler(parent.context)
                        db.deleteCountry(Integer.parseInt(value))
                    }
                })

Но isTrue не дожидается выполнения проверки
Как заставить ее дождаться результата выполнения функции?
  • Вопрос задан
  • 1132 просмотра
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Тебя совсем не смущает, что того же диалога ты дожидается и делаешь что-то в коллбеке? Одинаковый же смысл. В методы тебе приходит результат.
Ответ написан
Комментировать
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Как-то так:

suspend fun fingerPrintResult(): Boolean {
    val executor = Executors.newSingleThreadExecutor()
    val activity: FragmentActivity = this // reference to activity

    return suspendCoroutine { coroutine ->

        val biometricPrompt = BiometricPrompt(activity, executor, object : BiometricPrompt.AuthenticationCallback() {

                override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                    super.onAuthenticationError(errorCode, errString)
                    coroutine.resume(false)
                }

                override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                    super.onAuthenticationSucceeded(result)
                    coroutine.resume(true)
                }

                override fun onAuthenticationFailed() {
                    super.onAuthenticationFailed()
                    coroutine.resume(false)
                }
            })

        val promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle("Подтвердите личность")
            .setNegativeButtonText("Negative Button")
            .build()

        biometricPrompt.authenticate(promptInfo)
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы