2017-06-16 10 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 के रूप में चिह्नित किया गया है।

मैं अपनी किसी अन्य कोटलिन परियोजनाओं में इस त्रुटि में नहीं आया हूं। मैं कोटलिन संस्करण 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?)। आपको नहीं करना चाहिए, लेकिन मैन्युअल रूप से निरर्थकता को स्थापित करना सिर्फ मदद कर सकता है।
  • मुझे पता है कि क्रैश बेसफ्रैगमेंट एक्टिविटी जिंजरब्रेड तक नीचे जाता है - क्या यह लाइफसाइक्लियलिटी का उपयोग करने का परिणाम है? या क्या आपके पास अपनी परियोजना में अन्य, पुरानी, ​​पुरानी निर्भरताएं हैं?
12

मैं ठीक उसी समस्या थी, तो आप यहां नल प्रकार करना है:

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

सुझा सकते हैं यदि मैं इस परिभाषा को बदलने में सक्षम नहीं हूं तो क्या होगा? पूर्व के लिए एसडीके लाइब्रेरी फ़ंक्शन! –

+0

धन्यवाद! मेरे डायलॉगफ्रेगमेंट्स (एंड्रॉइड स्टूडियो से कोटलिन में परिवर्तित फॉर्म जावा) क्रैश हो रहे थे और बस एक साधारण? बंडल पर 'onCreateDialog (सहेजे गए इंस्टेंसस्टेट: बंडल?): संवाद' इसे ठीक कर दिया! –

1

मुद्दा AppInjector में है। मैंने Google GitHubBrowser नमूना का उपयोग किया जैसा आपने किया था और उसी त्रुटि में भाग गया था। मैंने कोड को अपनी परियोजना में कॉपी किया और एंड्रॉइड स्टूडियो को इसे कोटलिन में परिवर्तित करने दिया। जब ऐसा हुआ तो यह 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

संबंधित मुद्दे