BiometricPrompt Jetpack (androidx.biometric.BiometricPrompt) создает исключение NullPointerException
Я использую androidx.biometric:biometric:1.0.0-alpha03
в тестовом проекте и при нажатии negative button
Я всегда получаю следующее сообщение об ошибке:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence androidx.biometric.BiometricFragment.getNegativeButtonText()' on a null object reference
at androidx.biometric.BiometricPrompt$1$1.run(BiometricPrompt.java:329)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Я думаю, что это проблема с библиотекой, которую нужно исправить, так как фрагмент кажется нулевым, или я что-то здесь не так делаю?
val prompt = BiometricPrompt(activity, Executors.newSingleThreadExecutor(), object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {}
override fun onAuthenticationFailed() {}
})
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(title)
.setSubtitle(subtitle)
.setDescription(description)
.setNegativeButtonText(activity.getString(android.R.string.cancel))
.build()
prompt.authenticate(promptInfo)
2 ответа
Это было сообщено три месяца назад как ошибка, и это было исправлено два месяца назад. Тем не менее, они еще не выпустили свежий артефакт.
В этом выпуске есть некоторые комментарии, которые предполагают, что "это вопрос времени" и что добавление задержек может помочь в качестве обходного пути.
При рассмотрении рассматриваемой строки:
.setNegativeButtonText(activity.getString(android.R.string.cancel))
Можно заметить, что, возможно, отсутствуют два аргумента (это даже совершенно другой метод):
.setNegativeButton("Cancel", executor, cancelListener)
И код, размещенный выше, не содержит CancelListener
...
что, вероятно, является причиной этого NullPointerException
,
Для справки: Лучшая биометрия в Android P& Что нового в Android P - BiometricPrompt.