android - tutorial - kotlin 入門




IllegalArgumentException:savedInstanceState Non-Nullとして指定された場合はnull (3)

私は私のMainActivityを始めるときに奇妙なエラーが発生してい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
    }

}

エラーは、null savedInstanceState指定されたときに、 savedInstanceStateパラメーターがNULLであることを示します。 savedInstanceState: Bundle?savedInstanceState: Bundle? )であり、 onCreate()メソッドはソースで@Nullableとしてマークされています。

他のKotlinプロジェクトでこのエラーに遭遇したことはありません。 私はKotlinバージョン1.1.2-5を使用しています。 1.1.2-3で同じエラーが発生しました。


@mcassianoが指摘したように、問題はあなたのonCreateメソッドではなく、実際にはonActivityCreatedです。 2つの考え:

  • ライブラリなどが移行中であるため、フラグメント内のonActivityCreatedを手動でオーバーライドonActivityCreated 、明示的にBundleをnullableとしてマークする必要があります(savedInstanceState: Bundle?) 。 あなたはそうする必要はありませんが、手動でnull値を設定するだけで役立ちます。
  • 私は、クラッシュがBaseFragmentActivityGingerbreadまでずっと下がっていることに気付きました。これは、LifecycleActivityを使用した結果ですか? あるいは、あなたのプロジェクトに他の古い古い依存関係がありますか?

問題はonCreateメソッドにないようです。 com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt)を見てください。 私はそれが生成されたクラスであるかどうかは分かりませんが、次に何をすべきかを知る必要があります。


私はまったく同じ問題を抱えていました。ここではnull可能な型を作る必要があります:

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




kotlin