当所选项目视图为空时,Kotlin在Android上崩溃

van*_*hpr 7 android kotlin

我收到错误,应用程序在运行时死亡.

这是错误:

07-22 21:02:19.785 3136-3136/? E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
07-22 21:02:19.825 3136-3136/? E/dalvikvm: Could not find class 'android.widget.ThemedSpinnerAdapter', referenced from method android.support.v7.widget.AppCompatSpinner$DropDownAdapter.<init>
07-22 21:02:19.915 3136-3136/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.vankhanhpr.vidu2, PID: 3136
    java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter selectedItemView
    at com.example.vankhanhpr.vidu2.fragment_main.fragment_mom_baby.Create_File_Mon$onCreate$1.onItemSelected(Create_File_Mon.kt)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:893)
    at android.widget.AdapterView.selectionChanged(AdapterView.java:880)
    at android.widget.AdapterView.checkSelectionChanged(AdapterView.java:1043)
    at android.widget.AdapterView.handleDataChanged(AdapterView.java:1023)
    at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:180)
    at android.widget.Spinner.onMeasure(Spinner.java:486)
    at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:416)
    at android.view.View.measure(View.java:16628)
    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1231)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:590)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16628)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2298)
    at android.view.View.measure(View.java:16628)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5622)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    at android.view.Choreographer.doFrame(Choreographer.java:544)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:212)
    at android.app.ActivityThread.main(ActivityThread.java:5135)[enter image description here][1]
Run Code Online (Sandbox Code Playgroud)

码:

if(flag!!) {
    var adapter = ArrayAdapter.createFromResource(this, R.array.relationship_arrays, android.R.layout.simple_spinner_item)
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    var adapter_sex = ArrayAdapter.createFromResource(this, R.array.sex_arrays, android.R.layout.simple_spinner_item)
    adapter_sex.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    relationship_spinner!!.adapter = adapter
    sex_spinner!!.adapter = adapter_sex
}
else
{
    var adapter = ArrayAdapter.createFromResource(this, R.array.relationship_mom, android.R.layout.simple_spinner_item)
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

    var adapter_sex = ArrayAdapter.createFromResource(this, R.array.sex_mom, android.R.layout.simple_spinner_item)
    adapter_sex.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

    relationship_spinner!!.adapter = adapter
    sex_spinner!!.adapter = adapter_sex
}

try {
    relationship_spinner!!.setOnItemSelectedListener(object : OnItemSelectedListener {
        override fun onItemSelected(parentView: AdapterView<*>, selectedItemView: View, position: Int, id: Long) {
            relationship = parentView.getItemAtPosition(position).toString()
        }

        override fun onNothingSelected(parentView: AdapterView<*>) {
            var r = 0
        }
    })

    sex_spinner!!.setOnItemSelectedListener(object : OnItemSelectedListener {
        override fun onItemSelected(parentView: AdapterView<*>, selectedItemView: View, position: Int, id: Long) {
            sex = parentView.getItemAtPosition(position).toString()
        }

        override fun onNothingSelected(parentView: AdapterView<*>) {
            var r = 0
        }
    })
}
catch (e:Exception){}
Run Code Online (Sandbox Code Playgroud)

Bla*_*der 24

onItemSelected(),selectedItemView当没有选择任何内容时,参数可以为null.将其类型更改为View?而不是View正确处理未选择任何内容的情况.

示例(如果未选择任何内容,索引也为负数):

override fun onItemSelected(parentView: AdapterView<*>, selectedItemView: View?, position: Int, id: Long) {
    if (position >= 0) {
        sex = parentView.getItemAtPosition(position).toString()
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @卢卡斯 因为这是一个不良的API。但是由于历史原因,它可能永远都不会改变。至少selectedItemView应该标记为可为空。 (2认同)