首页 > 解决方案 > Kotlin - 指定为非 null 的参数为 null:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数 savedInstanceState

问题描述

我有一个偏好活动,但是当我尝试打开它时它会抛出错误。它从不启动活动。试过“捆绑?” 而不是“捆绑”,但它没有用。

class SettingsActivity : AppCompatPreferenceActivity() {
override fun onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.setDisplayHomeAsUpEnabled(true)
    // load settings fragment
    fragmentManager.beginTransaction()
        .replace(android.R.id.content, MainPreferenceFragment()).commit()
}

class MainPreferenceFragment : PreferenceFragment() {
    var key_video_resolution: ListPreference? = null
    var key_audio_source: ListPreference? = null
    var key_video_encoder: ListPreference? = null
    var key_video_fps: ListPreference? = null
    var key_video_bitrate: ListPreference? = null
    var key_output_format: ListPreference? = null
    var key_record_audio: SwitchPreference? = null
    var key_show_notification: SwitchPreference? = null
    override fun onCreate(savedInstanceState: Bundle) {
        super.onCreate(savedInstanceState)
        addPreferencesFromResource(R.xml.pref_main)
        key_record_audio =
            findPreference(getString(R.string.key_record_audio)) as SwitchPreference
        key_audio_source =
            findPreference(getString(R.string.key_audio_source)) as ListPreference
        key_audio_source!!.onPreferenceChangeListener = audioSourceListener
        key_video_encoder =
            findPreference(getString(R.string.key_video_encoder)) as ListPreference
        key_video_encoder!!.onPreferenceChangeListener = videoEncoderListener
        key_video_resolution =
            findPreference(getString(R.string.key_video_resolution)) as ListPreference
        key_video_resolution!!.onPreferenceChangeListener = videoResolutionListener
        key_video_fps = findPreference(getString(R.string.key_video_fps)) as ListPreference
        key_video_fps!!.onPreferenceChangeListener = videoFrameRateListener
        key_video_bitrate =
            findPreference(getString(R.string.key_video_bitrate)) as ListPreference
        key_video_bitrate!!.onPreferenceChangeListener = videoBitRateListener
        key_output_format =
            findPreference(getString(R.string.key_output_format)) as ListPreference
        key_output_format!!.onPreferenceChangeListener = outputFormatListener
        key_show_notification =
            findPreference(getString(R.string.key_show_notification)) as SwitchPreference
        setPreviousSelectedAsSummary()
    }

    private fun setPreviousSelectedAsSummary() {
        val prefs =
            PreferenceManager.getDefaultSharedPreferences(activity)
        val video_resolution = prefs.getString("key_video_resolution", null)
        val audio_enabled = prefs.getBoolean("key_record_audio", true)
        val audio_source = prefs.getString("key_audio_source", null)
        val video_encoder = prefs.getString("key_video_encoder", null)
        val video_frame_rate = prefs.getString("key_video_fps", null)
        val video_bit_rate = prefs.getString("key_video_bitrate", null)
        val output_format = prefs.getString("key_output_format", null)
        val show_notificaton = prefs.getBoolean("key_show_notification", false)
        /*Record Audio Prefs*/key_record_audio!!.isChecked = audio_enabled
        /*Audio Source Prefs*/if (audio_source != null) {
            val index = key_audio_source!!.findIndexOfValue(audio_source)
            key_audio_source!!.summary = key_audio_source!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_audio_source!!.context)
                    .getString(key_audio_source!!.key, "")
            key_audio_source!!.summary = defaultSummary
        }
        /*Video Encoder Prefs*/if (video_encoder != null) {
            val index = key_video_encoder!!.findIndexOfValue(video_encoder)
            key_video_encoder!!.summary = key_video_encoder!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_video_encoder!!.context)
                    .getString(key_video_encoder!!.key, "")
            key_video_encoder!!.summary = defaultSummary
        }
        /*Video Resolution Prefs*/if (video_resolution != null) {
            val index = key_video_resolution!!.findIndexOfValue(video_resolution)
            key_video_resolution!!.summary = key_video_resolution!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_video_resolution!!.context)
                    .getString(key_video_resolution!!.key, "")
            key_video_resolution!!.summary = defaultSummary
        }
        /*Video Frame Rate Prefs*/if (video_frame_rate != null) {
            val index = key_video_fps!!.findIndexOfValue(video_frame_rate)
            key_video_fps!!.summary = key_video_fps!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_video_fps!!.context)
                    .getString(key_video_fps!!.key, "")
            key_video_fps!!.summary = defaultSummary
        }
        /*Video Bit Rate Prefs*/if (video_bit_rate != null) {
            val index = key_video_bitrate!!.findIndexOfValue(video_bit_rate)
            key_video_bitrate!!.summary = key_video_bitrate!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_video_bitrate!!.context)
                    .getString(key_video_bitrate!!.key, "")
            key_video_bitrate!!.summary = defaultSummary
        }
        /*Output Format Prefs*/if (output_format != null) {
            val index = key_output_format!!.findIndexOfValue(output_format)
            key_output_format!!.summary = key_output_format!!.entries[index]
        } else {
            val defaultSummary =
                PreferenceManager.getDefaultSharedPreferences(key_output_format!!.context)
                    .getString(key_output_format!!.key, "")
            key_output_format!!.summary = defaultSummary
        }
        /*Notification Prefs*/key_show_notification!!.isChecked = show_notificaton
    }

    /*Audio Source*/
    private val audioSourceListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_audio_source)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            true
        }
    /*Video Encoder*/
    private val videoEncoderListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_video_encoder)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            listPreference.value = stringValue
            true
        }
    /*Video Resolution*/
    private val videoResolutionListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_video_resolution)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            listPreference.value = stringValue
            true
        }
    /*Video Frame Rate*/
    private val videoFrameRateListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_video_fps)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            listPreference.value = stringValue
            true
        }
    /*Video Bit Rate*/
    private val videoBitRateListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_video_bitrate)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            listPreference.value = stringValue
            true
        }
    /*outputFormat*/
    private val outputFormatListener =
        OnPreferenceChangeListener { preference, newValue ->
            val stringValue = newValue.toString()
            val listPreference =
                findPreference(getString(R.string.key_output_format)) as ListPreference
            val index = listPreference.findIndexOfValue(stringValue)
            listPreference.summary = listPreference.entries[index]
            listPreference.value = stringValue
            true
        }
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if (item.itemId == android.R.id.home) {
        onBackPressed()
    }
    return super.onOptionsItemSelected(item)
}

companion object {
    private val TAG = SettingsActivity::class.java.simpleName
}
}

我得到的例外是:

java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 的参数 savedInstanceState 在 android.app.ActivityThread。 android.app.servertransaction(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor .execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop( Looper.java:193) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java: 493)在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 引起:java.lang.IllegalArgumentException:指定为非空的参数为空:方法 kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull,参数 savedInstanceState 在 com.evonative.screenrecorder.SettingsActivity.onCreate(Unknown Source:2) 在 android.app.Activity.performCreate(Activity.java:7136) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android .app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread。performLaunchActivity(ActivityThread.java:2893) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage( Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(Native Method)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller。在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 运行(RuntimeInit.java:493) 

任何帮助将不胜感激。谢谢

** AppCompatPreferenceActivity**

abstract class AppCompatPreferenceActivity : PreferenceActivity() {
private var mDelegate: AppCompatDelegate? = null
override fun onCreate(savedInstanceState: Bundle) {
    delegate!!.installViewFactory()
    delegate!!.onCreate(savedInstanceState)
    super.onCreate(savedInstanceState)
}

override fun onPostCreate(savedInstanceState: Bundle) {
    super.onPostCreate(savedInstanceState)
    delegate!!.onPostCreate(savedInstanceState)
}

val supportActionBar: ActionBar?
    get() = delegate!!.supportActionBar

fun setSupportActionBar(toolbar: Toolbar?) {
    delegate!!.setSupportActionBar(toolbar)
}

override fun getMenuInflater(): MenuInflater {
    return delegate!!.menuInflater
}

override fun setContentView(@LayoutRes layoutResID: Int) {
    delegate!!.setContentView(layoutResID)
}

override fun setContentView(view: View) {
    delegate!!.setContentView(view)
}

override fun setContentView(
    view: View,
    params: ViewGroup.LayoutParams
) {
    delegate!!.setContentView(view, params)
}

override fun addContentView(
    view: View,
    params: ViewGroup.LayoutParams
) {
    delegate!!.addContentView(view, params)
}

override fun onPostResume() {
    super.onPostResume()
    delegate!!.onPostResume()
}

override fun onTitleChanged(title: CharSequence, color: Int) {
    super.onTitleChanged(title, color)
    delegate!!.setTitle(title)
}

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    delegate!!.onConfigurationChanged(newConfig)
}

override fun onStop() {
    super.onStop()
    delegate!!.onStop()
}

override fun onDestroy() {
    super.onDestroy()
    delegate!!.onDestroy()
}

override fun invalidateOptionsMenu() {
    delegate!!.invalidateOptionsMenu()
}

private val delegate: AppCompatDelegate?
    private get() {
        if (mDelegate == null) {
            mDelegate = AppCompatDelegate.create(this, null)
        }
        return mDelegate
    }
}

标签: androidkotlin

解决方案


该问题修复了错误来自父类和子类。我已将 Bundle 设置为可为空,并将其更改Bundle?为父类和子类中的任何位置,例如:

SettingsActicity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.setDisplayHomeAsUpEnabled(true)
    // load settings fragment
    fragmentManager.beginTransaction()
        .replace(android.R.id.content, MainPreferenceFragment()).commit()
}

然后MainPreferenceFragmentSettingsActivity课堂内。onCreate并且还onPostCreateAppCompatPreferenceActivity.


推荐阅读