我正在尝试为对话框片段实现指纹支持。我遵循了YouTube教程https://www.youtube.com/watch?v=dI9TItdw83U&,但是它具有如何在新页面而非对话框上实现指纹的功能。 FingerprintHandler FingerprintHandler =新的FingerprintHandler(this); 这是错误的,因为FingerprintHandler中的FingerprintHandler无法应用于生物特征活动。
我尝试使用getActivity()代替它,但是当我尝试访问对话框中的窗口小部件时,我的应用程序崩溃了,但是当我访问MainActivity中的窗口小部件时,它运行正常。
https://gist.github.com/EphraimB/f2c05184690a6aef9536a16b36ad509a
我希望FingerprintHandler访问并更改DialogFragment中的文本,但是应用程序崩溃,并且在调试器中收到错误消息,提示FingerprintHandler getViewById(R.id.paraLabel)正在更改nullpointer上的文本。
Logcat消息:
2019-05-15 11:08:53.163 11481-11481/com.example.paay E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.paay, PID: 11481
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.paay.FingerprintHandler.update(FingerprintHandler.java:52)
at com.example.paay.FingerprintHandler.onAuthenticationSucceeded(FingerprintHandler.java:45)
at android.hardware.fingerprint.FingerprintManager$AuthenticationCallback.onAuthenticationSucceeded(FingerprintManager.java:304)
at android.hardware.fingerprint.FingerprintManager.sendAuthenticatedSucceeded(FingerprintManager.java:1107)
at android.hardware.fingerprint.FingerprintManager.access$700(FingerprintManager.java:75)
at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:1030)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6981)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
答案 0 :(得分:1)
发生崩溃是因为您要在活动视图之外访问小部件R.id.paraLabel
请在您的FingerprintHandler构造函数中添加一个TextView
public FingerprintHandler(Context context,TextView txt) {
this.context = context;
this.textview = txt ;
}
,然后在您的更新方法中使用textview代替:
private void update(String s, boolean b) {
textview .setText(s);
if (b == false) {
textview .setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
}
else {
textview.setTextColor(ContextCompat.getColor(context, R.color.colorPrimary));
}
}
nullpointer也将出现在您的imageview中。