I have a preference activity but it is throwing error when I try to open it. It never launches the activity. Tried 'Bundle?' instead of 'Bundle' but it did not work.
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
}
}
and the exception I am getting is:
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:2913) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at 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) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState at com.evonative.screenrecorder.SettingsActivity.onCreate(Unknown Source:2) at android.app.Activity.performCreate(Activity.java:7136) at android.app.Activity.performCreate(Activity.java:7127) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at 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) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Any help would be highly appreciated. Thanks
** 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?always. Checkout: tanzu.vmware.com/content/blog/…