IllegalArgumentException:savedInstanceState指定为非空为空

当我启动MainActivity时出现一个奇怪的错误:

 06-16 16:01:05.193 2083-2083/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.android.example.github, PID: 2083 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.example.github/com.android.example.github.ui.MainActivity}: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState at com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt) at android.app.Application.dispatchActivityCreated(Application.java:197) at android.app.Activity.onCreate(Activity.java:961) at android.support.v4.app.BaseFragmentActivityGingerbread.onCreate(BaseFragmentActivityGingerbread.java:54) at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:319) at com.android.example.github.ui.MainActivity.onCreate(MainActivity.kt:20) at android.app.Activity.performCreate(Activity.java:6682) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6121) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

这是我的MainActivity类:

 class MainActivity : LifecycleActivity(), HasSupportFragmentInjector { lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Fragment> @Inject set lateinit var navigationController: NavigationController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) if (savedInstanceState == null) { navigationController.navigateToSearch() } } override fun supportFragmentInjector(): AndroidInjector<Fragment> { return dispatchingAndroidInjector } } 

该错误指出参数savedInstanceState为空时,当它指定为非空; 但是可以为空( savedInstanceState: Bundle? ),并且onCreate()方法在源代码中标记为@Nullable

在我的其他Kotlin项目中,我没有遇到过这个错误。 我正在使用Kotlin版本1.1.2-5; 并与1.1.2-3有相同的错误。

这似乎是问题不在onCreate方法。 试着看看com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt) 。 我不知道它是否是一个生成的类,但它应该让你知道下一步该怎么做。

我有完全相同的问题,你必须在这里做可为空的类型:

 override fun onCreatePreferences(bundle: Bundle?, s: String?) {} 

正如@mcassiano指出的,看起来问题不是你的onCreate方法,而是实际onActivityCreated 。 两个想法:

  • 由于库等处于转换状态,现在您可能必须手动覆盖片段中的onActivityCreated ,并将Bundle显式标记为空(savedInstanceState: Bundle?) 。 你不应该,但手动设置可空性可能只是帮助。
  • 我注意到崩溃一直下降到BaseFragmentActivityGingerbread – 这是使用LifecycleActivity的结果吗? 或者你的项目中是否还有其他过时的依赖关系?