Jetpack的BiometricPrompt(androidx.biometric.BiometricPrompt)引发NullPointerException

时间:2019-04-02 18:58:33

标签: android android-jetpack android-fingerprint-api android-biometric-prompt

我在测试项目中使用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 个答案:

答案 0 :(得分:1)

据报告three months ago是一个错误,并被报告为固定的two months ago。但是,他们尚未发布新的工件。

该问题中有一些评论表明“这是时机”,而增加延迟可以作为一种解决方法。

答案 1 :(得分:0)

查看有问题的行时:

.setNegativeButtonText(activity.getString(android.R.string.cancel))

可以注意到,可能缺少两个参数(甚至是另一个方法):

.setNegativeButton("Cancel", executor, cancelListener)

上面发布的代码没有任何CancelListener ...

这可能是该NullPointerException的原因。

供参考:Better Biometrics in Android PWhat is new in Android P — BiometricPrompt