android - 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
}
}
解决方案
该问题修复了错误来自父类和子类。我已将 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()
}
然后MainPreferenceFragment
在SettingsActivity
课堂内。onCreate
并且还onPostCreate
对AppCompatPreferenceActivity
.
推荐阅读
- kibana - 来自 Kibana 的应用程序日志分析
- go - 不能在字段值中使用 (type []map[string]interface {}) 作为 type []string
- c# - 如何从另一个页面重定向到主页而不丢失用户在主页上的输入数据?
- android - Retrofit2 和 Moshi:发送没有嵌套对象的 JSON
- php - 为什么这个加法函数有时在 PHP 中不起作用?
- python - 项目有两个用户表的 Django 中的完整性错误?
- java - 不使用通配符编写 Collections.addAll(Collection c, T... elements)
- java - 使用增强的 for 循环搜索 LinkedList
- android - PlayStore - 以下 APK 或应用程序包可在 64 位设备上使用,但只有本机 32 位代码:1
- java - 为什么我的 Reference(URI "") 解析为 ds:Manifest,而不是根元素,因为它应该?