在开始的Activity的onCreate()中崩溃,因为“指定为非null的参数为null”

时间:2018-08-23 10:02:28

标签: android kotlin

我有一个MainActivity,它扩展了自定义BaseActivityonCreate中的MainActivity方法如下:

class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        Log.i("saved_instance_state", savedInstanceState.toString())
        super.onCreate(savedInstanceState)
        ...
    }
    ...
}

onCreate中的BaseActivity方法如下:

public abstract class BaseActivity extends AppCompatActivity {
    ...
    @SuppressWarnings("ConstantConditions")
    @CallSuper
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
    }
    ...
}

我的问题是,即使super.onCreate(savedInstanceState)方法中parameter specified as non-null is null的类型为savedInstanceStateonCreate也会以某种方式引发错误Bundle?,并且它会似乎与BaseActivity@Nullable Bundle)中的匹配。

我的代码有问题吗,还是在编译器中有问题?

1 个答案:

答案 0 :(得分:1)

非常抱歉。事实证明,这完全是另一类。该MainActivity已连接到管理应用程序生命周期的经理类(扩展了Application.ActivityLifecycleCallbacks)。 onActivityCreated(activity: Activity, savedInstanceState: Bundle)是导致崩溃的原因,因为它期望的是非null的Bundle

所以我将其更改为可为空的Bundle,并且效果很好。

编辑:在此方面向我提出建议的堆栈跟踪:

java.lang.RuntimeException: Unable to start activity ComponentInfo{net.inovidea.playday/net.inovidea.playday.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:2505)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2577)
    at android.app.ActivityThread.access$1000(ActivityThread.java:164)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1462)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:160)
    at android.app.ActivityThread.main(ActivityThread.java:5541)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
**
Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState
    at net.inovidea.playday.util.BackgroundManager.onActivityCreated(BackgroundManager.kt)
**
    at android.app.Application.dispatchActivityCreated(Application.java:197)
    at android.app.Activity.onCreate(Activity.java:950)
    at android.support.v4.app.SupportActivity.onCreate(SupportActivity.java:66)
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:321)
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:84)
    at dev.rian.base.activity.BaseActivity.onCreate(BaseActivity.java:154)
    at net.inovidea.playday.MainActivity.onCreate(MainActivity.kt:24)
    at android.app.Activity.performCreate(Activity.java:6093)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2458)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2577) 
    at android.app.ActivityThread.access$1000(ActivityThread.java:164) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1462) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:160) 
    at android.app.ActivityThread.main(ActivityThread.java:5541) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)