2017-06-16 67 views
8

我得到一個奇怪的錯誤,當我開始我的MainActivity拋出:IllegalArgumentException:指定爲非空savedInstanceState是空

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有相同的錯誤。

+0

我有同樣的問題。 AppInjector上的問題是什麼,你能建議嗎 –

回答

3

看來問題不在onCreate方法中。試試看com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt)。我不知道它是否是一個生成的類,但它應該讓你知道下一步該怎麼做。

0

正如@mcassiano所說,看起來問題不在於您的onCreate方法,而是實際上onActivityCreated。兩個想法:

  • 由於這樣的事實,圖書館和如處於轉型期,現在你可能只是手動替換您的片段onActivityCreated並明確標記包可爲空:(savedInstanceState: Bundle?)。你不應該,但手動設置可空性可能只是幫助。
  • 我注意到崩潰一直下降到BaseFragmentActivityGingerbread - 這是使用LifecycleActivity的結果嗎?或者你的項目中是否還有其他過時的依賴關係?
12

我有完全相同的問題,你要在這裏做可空類型:

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

如果我不能改變這個定義怎麼辦?爲前。 SDK庫函數! –

+0

謝謝!我的DialogFragments(從Android Studio轉換成java到Kotlin)崩潰,只是一個簡單的? onCreateDialog(savedInstanceState:Bundle?)中的Bundle中:對話框固定它! –

1

的問題是在AppInjector。我像你一樣使用谷歌GitHubBrowser示例,並遇到了同樣的錯誤。我將代碼複製到我的項目中,並讓Android Studio將其轉換爲Kotlin。當它這樣做時,它沒有正確指定導致崩潰的savedInstanceState參數的可空性。只要將它設置爲可選,就像在下面的代碼中一樣,它將起作用。

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) 
    } 
} 
+0

我的英雄!節省了我幾個小時的時間。謝謝 – j2emanue

相關問題