Android Fragment 中使用AlertDialog报错throwable:java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class android.view.View.getClass()' on a null object reference。
报错索引:
at com.android.internal.app.WindowDecorActionBar.getDecorToolbar(WindowDecorActionBar.java:246)
at com.android.internal.app.WindowDecorActionBar.init(WindowDecorActionBar.java:198)
at com.android.internal.app.WindowDecorActionBar.<init>(WindowDecorActionBar.java:180)
at android.app.Dialog.show(Dialog.java:316)
分析:
错误是从Dialog.show()里面调用WindowDecorActionBar.getDecorToolbar的空值异常抛出,原因是拿不到当前view,导致Dialog挂载UI过程报错,看了包名,Dialog是android.app包下的,而xml中的view用的是androidx下的
,然后我们实际用于多选框实现而引入的AlertDialog,是在Androidx下的,从而引发的报错。
猜测原因:
当前Fragment中import了android.app.Dialog,导致androidx.AlertDialog.Builder生产AlertDialog时调用的是android.app.Dialog从而引发的报错。
解决方法:
import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface;