Ошибка создания тоста при отмене биометрической аутентификации - PullRequest
0 голосов
/ 12 октября 2019

У меня возникают некоторые проблемы при создании тоста, когда пользователь отменяет BiometricPrompt.

Я получаю сообщение об ошибке:

java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare()

Вот мойкод области, на которую это влияет:

object : BiometricPrompt.AuthenticationCallback()
            {
                override fun onAuthenticationError(errorCode: Int, errString: CharSequence?) {
                    super.onAuthenticationError(errorCode, errString)
                    Toast.makeText(applicationContext, "Authentication Error. Please try again :)", Toast.LENGTH_LONG)
                        .show()
                }

                // onAuthSucceeded would be here.

                override fun onAuthenticationFailed() {
                    super.onAuthenticationFailed()
                    Toast.makeText(applicationContext, "Authentication Failed. Please try again :)", Toast.LENGTH_LONG)
                        .show()
                }
            }

Я пытался добавить Looper.prepare () перед Toast.makeText, но это не помогает.

Заранее спасибо за вашу помощь:)

Ответы [ 3 ]

0 голосов
/ 12 октября 2019

Эта проблема возникает из-за того, что вышеупомянутый toast вызывается в рабочем потоке,

, вы можете использовать приведенный ниже код, чтобы запустить его в основном потоке.

Activity.runOnUiThread(new Runnable() {
  public void run() {
    Toast.makeText(activity, "Authentication Error. Please try again :)", Toast.LENGTH_SHORT).show();
  }
});
0 голосов
/ 12 октября 2019

Вы должны вызвать Toast внутри потока пользовательского интерфейса. В Котлине это будет выглядеть так:

runOnUiThread(
        object : Runnable {
            override fun run() {
                Toast.makeText(applicationContext, "Authentication Error. Please try again :)", Toast.LENGTH_LONG)
                        .show()
            }
        }
)
0 голосов
/ 12 октября 2019

Это происходит потому, что вы вызываете toast в рабочем потоке,

вы можете использовать приведенный ниже код, чтобы запустить его в основном потоке.

activity.runOnUiThread(new Runnable() {
  public void run() {
    Toast.makeText(activity, "Authentication Error. Please try again :)", Toast.LENGTH_SHORT).show();
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...