【问题标题】:DialogFragment.onDismiss() null pointer exception in KotlinKotlin 中的 DialogFragment.onDismiss() 空指针异常
【发布时间】:2020-01-20 18:57:49
【问题描述】:

这是 Kotlin,不是 Java,仅供参考。

我有一个正在使用的 DialogFragment 子类,当它被解除时我遇到了一些崩溃。它不会每次都发生,我似乎无法找到它的模式。崩溃发生在被覆盖的 onDismiss() 函数内部,作为自动 Kotlin Intrinstics.checkParameterIsNotNull() 调用。这是我的对话框子类中反编译的 Kotlin->Java 代码:

 public void onDismiss(@NotNull DialogInterface dialog) {
   Intrinsics.checkParameterIsNotNull(dialog, "dialog");
   super.onDismiss(dialog);
}

这是崩溃消息:

java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter dialog
at com.foo.MyDialogFragment.onDismiss(Unknown Source:2)

这是 DialogInterface 参数,它发生在我的任何代码运行之前,所以我无法阻止它。在此之前无法进行检查,因为 Kotlin 编译器会在我的任何代码之前插入空检查。

我通过在拥有的 Activity 的 onStop() 中调用它来关闭对话框

myDialog?.dismissAllowingStateLoss()

知道是什么原因造成的,更重要的是,我能做什么?这似乎不应该发生,因为接口指定它不能是null

【问题讨论】:

  • 张贴整个MyDialogFragment 会有所帮助
  • 另外,您是否使用minifyEnabled true 运行此应用程序?在你的app/build.gradle?
  • 很遗憾,我无法粘贴整个代码,因为它是专有的。不过,我认为这并不重要,因为onDismiss() 是它崩溃的地方,我在MyDialogFragment 中没有做任何其他事情,除了在我展示的地方解雇它。我没有使用minifyEnabled

标签: android kotlin android-dialogfragment


【解决方案1】:

这可能是由于 Android 问题跟踪器上的 this bug 导致的,该问题已在 androidx.fragment 版本 1.2.0 中得到修复。更新到该版本的 androidx.fragment 应该可以解决问题。

特别是当对话框已被销毁时,取消/关闭回调的时间似乎存在问题。

【讨论】:

  • 我认为这是原因。很好的发现!
猜你喜欢
  • 2020-03-07
  • 2022-01-19
  • 1970-01-01
  • 2019-03-31
  • 2016-09-22
  • 2013-12-19
  • 1970-01-01
  • 2015-07-12
相关资源
最近更新 更多