我正在使用public void load()
{
try
{
string sql;
sql = "select * from student";
cmd = new SqlCommand(sql, con);
con.Open();
dr = cmd.ExecuteReader();
dee = new SqlDataAdapter(sql, con);
while (dr.Read())
{
dataGridView1.Rows.Add(dr[0], dr[1], dr[2], dr[3]);
}
con.Close();
}
catch(Exception ex)
{
}
finally
{
con.Close();
cmd.Dispose();
}
}
中的BiometricPrompt进行身份验证过程。
但是我面临一个非常奇怪的问题。
我第一次调用androidx.biometric:biometric:1.0.0-beta02
时一切正常,该库根据设置的安全方法(模式,指纹,密码等)向我显示屏幕,然后调用该回调,一切正常。
问题是当我第二次致电biometricsPromt.authenticate()
时收到错误消息:
E / DeviceCredentialHandler:onCreate:执行器和/或回调为 空!
我当然要传递执行程序和回调->它们不为空
有人遇到相同的问题或有什么想法可能是什么问题吗?
这就是我创建BiometricPromt的方式
`
biometricsPromt.authenticate()
`
这是我的称呼方式:
`
companion object {
private val executor: Executor by lazy {
Executors.newSingleThreadExecutor()
}
fun showBiometricsPrompt(
activity: FragmentActivity,
callback: BiometricPrompt.AuthenticationCallback
): BiometricPrompt {
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle(activity.getString(R.string.title_authentication))
.setDescription(activity.getString(R.string.msg_authenticate_first))
.setDeviceCredentialAllowed(true)
.build()
val biometricPrompt =
BiometricPrompt(
activity,
executor, callback
)
biometricPrompt.authenticate(promptInfo)
return biometricPrompt
}
`
答案 0 :(得分:1)
这是解决此问题的方法,但不是完整的解决方法。
完成身份验证后要完成的所有操作后,您需要致电recreate()
。
这将重新启动活动,并允许再次显示生物识别提示。
答案 1 :(得分:0)
您要在什么设备上进行测试?您可以同时在公共问题跟踪程序here上提交错误吗?
答案 2 :(得分:0)
似乎与以下行有关:.setDeviceCredentialAllowed(true)
如果我将其更改为false,则每次都可以使用,而无需重新创建活动
答案 3 :(得分:0)
删除:
private val executor: Executor by lazy {
Executors.newSingleThreadExecutor()
}
并用以下代码替换您的执行器:
ContextCompat.getMainExecutor(activity)