studio programacion para libros gratis ediciĆ³n desarrollo desarrollar aprende aplicaciones android android-activity kotlin

para - programacion android pdf 2018



IllegalArgumentException: savedInstanceState especificado como no nulo es nulo (5)

Como @mcassiano señaló, parece que el problema no es con su método onCreate sino en realidad con onActivityCreated . Dos pensamientos

  • Debido al hecho de que las bibliotecas y otras están en transición, por ahora puede que solo tenga que anular manualmente onActivityCreated en su fragmento y marcar explícitamente el paquete como anulable: (savedInstanceState: Bundle?) . No debería tener que hacerlo, pero configurar manualmente la nulabilidad puede ayudar.
  • Me doy cuenta de que el bloqueo se reduce a BaseFragmentActivityGingerbread. ¿Es este el resultado de usar LifecycleActivity? ¿O tiene otras dependencias más antiguas y desactualizadas en su proyecto?

Recibo un error extraño cuando inicio mi 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) 

Esta es mi clase 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 } }

El error indica que el parámetro savedInstanceState es nulo, cuando se especifica como no nulo; pero es savedInstanceState: Bundle? ( savedInstanceState: Bundle? ) y el método onCreate() está marcado como @Nullable en la fuente.

No he encontrado este error en ninguno de mis otros proyectos de Kotlin. Estoy usando la versión 1.1.2-5 de Kotlin; y tuvo el mismo error con 1.1.2-3.


El problema está en el AppInjector. Utilicé la muestra de GitHubBrowser de Google como lo hiciste y encontré este mismo error. Copié el código a mi proyecto y dejé que Android Studio lo convirtiera a Kotlin. Cuando hizo esto, no especificó correctamente la nulabilidad del parámetro savedInstanceState , que es lo que está causando el bloqueo. Solo hazlo opcional como en el siguiente código y funcionará.

object AppInjector { fun init(app: App) { DaggerAppComponent.builder().application(app) .build().inject(app) app .registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { handleActivity(activity) } override fun onActivityStarted(activity: Activity) { } override fun onActivityResumed(activity: Activity) { } override fun onActivityPaused(activity: Activity) { } override fun onActivityStopped(activity: Activity) { } override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { } override fun onActivityDestroyed(activity: Activity) { } }) } private fun handleActivity(activity: Activity) { if (activity is HasSupportFragmentInjector) { AndroidInjection.inject(activity) } (activity as? FragmentActivity)?.supportFragmentManager?.registerFragmentLifecycleCallbacks( object : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentCreated(fm: FragmentManager?, f: Fragment?, savedInstanceState: Bundle?) { if (f is Injectable) { AndroidSupportInjection.inject(f) } } }, true) } }


Parece que el problema no está en el método onCreate . Intente buscar en com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt) . No puedo decir si es una clase generada, pero debería darle una idea de qué hacer a continuación.


Puede utilizar un operador de fusión nula ?: . El savedInstanceState pasará al método super.onCreate solo si es @NonNull ; de lo contrario, si es null , se pasará un Bundle() vacío.

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState?: Bundle()) }


Tuve exactamente el mismo problema, tienes que hacer tipos anulables aquí:

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