java - 尝试访问对话框片段上的小部件时出现空指针异常
问题描述
我正在尝试对对话片段实现指纹支持。我遵循了 youtube 教程https://www.youtube.com/watch?v=dI9TItdw83U&,但它有如何在新页面而不是对话框上实现指纹。指纹处理器指纹处理器 = 新指纹处理器 (this); 这是错误的说 FingerprintHandler 中的 FingerprintHandler 不能应用于生物识别活动。
我尝试了 getActivity() 而不是这个,但是当我尝试访问对话框中的小部件时,我的应用程序崩溃了,但是当我访问 MainActivity 中的小部件时,它工作正常。
https://gist.github.com/EphraimB/f2c05184690a6aef9536a16b36ad509a
我希望 FingerprintHandler 能够访问和更改 DialogFragment 中的文本,但应用程序崩溃了,并且我在调试器中收到错误消息,指出 FingerprintHandler getViewById(R.id.paraLabel) 正在更改空指针上的文本。
日志信息:
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)
解决方案
发生崩溃是因为您想访问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 上。
推荐阅读
- ruby - 对“自我”的这种使用感到非常困惑;'参数.方法'
- laravel - .htaccess 的目录被更改
- mongodb - Mongodb查询返回字段值
- sql-server - 在 SQL 代理作业中由 SSIS 项目 FTP 任务下载时损坏的图像
- android - 我可以使用除我开发的 Android 应用程序以外的任何浏览器限制访问我的网站吗?
- openstreetmap - 如何在一个行政区域内找到所有方法
- python - 使用带有构造函数的 MySQL 连接器
- c - 为什么在 MASM 汇编中使用 FPU x87 指令集执行操作时得到无意义的数字?
- javascript - 不调用 ES6 导入
- wordpress - WordPress 自定义查询字符串未被 Google 索引