当我开始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
为null;但它可以为空(savedInstanceState: Bundle?
),onCreate()
方法在源代码中标记为@Nullable
。
我在任何其他Kotlin项目中都没有遇到过这个错误。我正在使用Kotlin版本1.1.2-5;与1.1.2-3有相同的错误。
答案 0 :(得分:49)
我遇到了完全相同的问题,你必须在这里制作可空类型:
<select required name="fontSize">
<option value="">Please select</option>
<option value="9">9 px</option>
<option value="10">10 px</option>
<option value="11">11 px</option>
<option value="12">12 px</option>
<option value="13">13 px</option>
<option value="14">14 px</option>
<option value="15" selected="">15 px</option>
<option value="16">16 px</option>
</select>
<select name="fontColor">
<option value="">Please select</option>
<option value="red">Red</option>
<option value="green">Green</option>
<option value="blue">Blue</option>
</select>
答案 1 :(得分:8)
似乎问题不在com.android.example.github.injection.AppInjector$init$1.onActivityCreated(AppInjector.kt)
方法中。试着看{{1}}。我不知道它是否是一个生成的类,但它应该让你知道下一步该做什么。
答案 2 :(得分:7)
问题出在AppInjector中。我像你一样使用谷歌GitHubBrowser示例并遇到了同样的错误。我将代码复制到我的项目中,让Android Studio将其转换为Kotlin。当它这样做时,它没有正确地指定导致崩溃的b'{"message":"Invalid Field for addIssues: repo_id,issue_number"}'
参数的可为空性。只需将其设置为可选,如下面的代码所示,它将起作用。
savedInstanceState
答案 3 :(得分:3)
您可以使用空值运算符?:
。 savedInstanceState
仅在为super.onCreate
时才传递给@NonNull
方法,否则,如果为null
,则将传递空的Bundle()
。 / p>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState?: Bundle())
}
答案 4 :(得分:2)
正如@mcassiano所指出的那样,问题似乎不是onCreate
方法,而是实际onActivityCreated
。两个想法:
onActivityCreated
并明确将Bundle标记为可为空:(savedInstanceState: Bundle?)
。你不应该这样做,但手动设置可空性可能会有所帮助。答案 5 :(得分:0)
您知道内部函数super.onCreate
看起来像public void onCreate(Bundle savedInstanceState)
,这个saveInstanceState不能为Null,可能正在调用的函数可以连接到其他函数。就我而言,super.onCreate
连接到onCreatePreferences
,然后我解决了这个问题,此代码如下:
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.preferences_pomodoro)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState?:Bundle.EMPTY)
if (context != null) {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context!!)
}
}
答案 6 :(得分:0)
如果没有其他效果,则可以通过以下方式传递一个空的捆绑包:
if (savedInstanceState == null)
savedInstanceState = new Bundle();
super.onCreate(savedInstanceState);
或者如果您始终想要一个空捆绑包,则只需:
super.onCreate(new Bundle());
梅恩不是那么漂亮,但可以。