I have 2 activites, MainActivity and SettingsActivity. When settings button is pushed, SettingsActivity is started and loads PreferenceFragment.
App immediately crashes on fragment start:
9188/com.app.android.judge E/AndroidRuntime: FATAL EXCEPTION: main Process: com.app.android.judge, PID: 9188 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.android.judge/com.app.android.judge.Settings.SettingsActivity}: java.lang.ClassCastException: java.util.HashSet cannot be cast to java.lang.Boolean 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.ClassCastException: java.util.HashSet cannot be cast to java.lang.Boolean at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:273) at android.preference.Preference.getPersistedBoolean(Preference.java:1702) at android.preference.TwoStatePreference.onSetInitialValue(TwoStatePreference.java:188) at android.preference.Preference.dispatchSetInitialValue(Preference.java:1391) at android.preference.Preference.onAttachedToHierarchy(Preference.java:1185) at android.preference.PreferenceGroup.addPreference(PreferenceGroup.java:163) at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:105) at android.preference.PreferenceGroup.addItemFromInflater(PreferenceGroup.java:104) at android.preference.GenericInflater.rInflate(GenericInflater.java:490) at android.preference.GenericInflater.rInflate(GenericInflater.java:495) at android.preference.GenericInflater.inflate(GenericInflater.java:327) at android.preference.GenericInflater.inflate(GenericInflater.java:264) at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:280) at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:326) at com.app.android.judge.Settings.MatchPreferenceFragment.onCreate(MatchPreferenceFragment.java:24) at android.app.Fragment.performCreate(Fragment.java:2336) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:949) at android.app.BackStackRecord.setLastIn(BackStackRecord.java:860) at android.app.BackStackRecord.calculateFragments(BackStackRecord.java:883) at android.app.BackStackRecord.run(BackStackRecord.java:728) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) at android.app.FragmentController.execPendingActions(FragmentController.java:371) at android.app.Activity.performStart(Activity.java:6698) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2629) 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)
The PrefereneFragment I want to launch is:
public class MatchPreferenceFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.match_preference);
Preference player1Life = findPreference(getString(R.string.player1_life_key));
Preference player1Color = findPreference(getString(R.string.player1_color_key));
Preference player1Energy = findPreference(getString(R.string.player1_energy_key));
Preference player1Clues = findPreference(getString(R.string.player1_clue_key));
Preference player1Poison = findPreference(getString(R.string.player1_poison_key));
Preference player2Life = findPreference(getString(R.string.player2_life_key));
Preference player2Color = findPreference(getString(R.string.player2_color_key));
Preference player2Energy = findPreference(getString(R.string.player2_energy_key));
Preference player2Clues = findPreference(getString(R.string.player2_clue_key));
Preference player2Poison = findPreference(getString(R.string.player2_poison_key));
bindPreferenceSummaryToValue(player1Life);
bindPreferenceSummaryToValue(player1Color);
bindPreferenceSummaryToValue(player1Energy);
bindPreferenceSummaryToValue(player1Clues);
bindPreferenceSummaryToValue(player1Poison);
bindPreferenceSummaryToValue(player2Life);
bindPreferenceSummaryToValue(player2Color);
bindPreferenceSummaryToValue(player2Energy);
bindPreferenceSummaryToValue(player2Clues);
bindPreferenceSummaryToValue(player2Poison);
setHasOptionsMenu(true);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_search).setVisible(false);
menu.findItem(R.id.action_settings).setVisible(false);
super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onPreferenceChange(Preference preferences, Object key) {
String stringValue = key.toString();
if (preferences instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preferences;
int prefIndex = listPreference.findIndexOfValue(stringValue);
if (prefIndex >= 0) {
CharSequence[] labels = listPreference.getEntries();
preferences.setSummary(labels[prefIndex]);
}
} else if (preferences instanceof EditTextPreference) {
preferences.setSummary(stringValue);
}
return true;
}
private void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(this);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(preference.getContext());
String preferenceString = preferences.getString(preference.getKey(), "");
onPreferenceChange(preference, preferenceString);
}
}
XML file is:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/match_settings_title">
<PreferenceCategory
android:title="@string/player1_settings_title"
android:key="player1_match_settings">
<EditTextPreference
android:key="@string/player1_life_key"
android:inputType="number"
android:title="@string/player1_life_settings_title"
android:dialogTitle="@string/player1_life_dialog_title"
android:defaultValue="@string/player1_life_default_value"/>
<CheckBoxPreference
android:key="@string/player1_counters_key"
android:title="@string/player1_counters_title"
android:summary="Toggle Counters"/>
<EditTextPreference
android:key="@string/player1_energy_key"
android:inputType="number"
android:title="@string/energy_title"
android:dialogTitle="@string/energy_dialog_title"
android:defaultValue="@string/player1_energy_default_value"/>
<EditTextPreference
android:key="@string/player1_clue_key"
android:inputType="number"
android:title="@string/clue_title"
android:dialogTitle="@string/clue_dialog_title"
android:defaultValue="@string/player1_clue_default_value"/>
<EditTextPreference
android:key="@string/player1_poison_key"
android:inputType="number"
android:title="@string/poison_title"
android:dialogTitle="@string/poison_dialog_title"
android:defaultValue="@string/player1_poison_default_value"/>
<ListPreference
android:key="@string/player1_color_key"
android:title="@string/player1_color_settings_title"
android:entries="@array/colorEntries"
android:entryValues="@array/colorValues"
android:summary="%s"
android:defaultValue="@string/player1_color_default_value">
</ListPreference>
</PreferenceCategory>
<PreferenceCategory
android:title="@string/player2_settings_title"
android:key="player2_match_settings">
<EditTextPreference
android:key="@string/player2_life_key"
android:inputType="number"
android:title="@string/player2_life_settings_title"
android:dialogTitle="@string/player2_life_dialog_title"
android:defaultValue="@string/player2_life_default_value"/>
<CheckBoxPreference
android:key="@string/player2_counters_key"
android:title="@string/player2_counters_title"
android:summary="Toggle Counters"/>
<EditTextPreference
android:key="@string/player2_energy_key"
android:inputType="number"
android:title="@string/energy_title"
android:dialogTitle="@string/energy_dialog_title"
android:defaultValue="@string/player2_energy_default_value"/>
<EditTextPreference
android:key="@string/player2_clue_key"
android:inputType="number"
android:title="@string/clue_title"
android:dialogTitle="@string/clue_dialog_title"
android:defaultValue="@string/player2_clue_default_value"/>
<EditTextPreference
android:key="@string/player2_poison_key"
android:inputType="number"
android:title="@string/poison_title"
android:dialogTitle="@string/poison_dialog_title"
android:defaultValue="@string/player2_poison_default_value"/>
<ListPreference
android:key="@string/player2_color_key"
android:title="@string/player2_color_settings_title"
android:entries="@array/colorEntries"
android:entryValues="@array/colorValues"
android:summary="%s"
android:defaultValue="@string/player2_color_default_value">
</ListPreference>
</PreferenceCategory>
</PreferenceScreen>
I see the error, and have narrowed it down to something going on between my CheckBoxPreference, XML, and PreferenceFragment. Unfortunately, not exactly sure what. Any help is appreciated.
Edit: I have tried reinstalling the app and deleting app data. Error still persists.
Edit: Cleaning and rebuilding did not fix.
Edit: latest repo- https://github.com/Jaren831/Judge/tree/production