Android
Kotlin

JavaからKotlinへ移行中にParameter specified as non-null is null

Android StudioのCodeメニューのConvert Java File to Kotlin Fileを使ってKotlinへの移行を進めるも、ランタイムエラーに遭遇。

java.lang.IllegalArgumentException: Parameter specified as non-null is null:
method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,
parameter savedInstanceState

要は引数がnull許可しないのにnullが来たと怒られている。

KotlinでParameter specified as non-null is null

この記事にあるように、引数が

, savedInstanceState: Bundle)

のようになっているところを、

, savedInstanceState: Bundle?)

のようにnull許可に変えることで解決することは理解できた。しかし、どこを直すべきかわからずハマった。ActivityのsavedInstanceStateはnull許可している。どこ?

注意深くスタックトレースを追うと、Application.ActivityLifecycleCallbacksのinterface実装の引数がnull許可になっていなかったことが原因。

override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle)

CodeメニューのOverride Methodsを選択してコードを自動生成すると、BundleだけでなくActivityもnull許可で作られたので、そのようにしました。

override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?)

ActivityLifecycleCallbacksのその他のメソッドも同様に修正して、無事起動するようになりました。

ukiuki.png