尝试访问对话框片段上的窗口小部件时出现空指针异常

时间:2019-05-15 14:55:39

标签: java android

我正在尝试为对话框片段实现指纹支持。我遵循了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)

1 个答案:

答案 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中。