Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PreferenceFragment crashing, Null object Reference

I have a simple ActionBarActivity which holds a PreferenceFragment as follows:

import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceFragment;

public class SettingsActivity extends Activity {
    
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    // Display the fragment as the main content.
    getFragmentManager().beginTransaction()
            .replace(R.id.fra_settings_container, new SettingsFragment()).commit();
}
public static class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}
}

Here is my preferences.xml:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<ListPreference
    android:defaultValue="15"
    android:dialogTitle="@string/settings_heading_alarm_interval"
    android:entries="@array/alarm_interval_entries"
    android:entryValues="@array/alarm_interval_values"
    android:key="alarm_interval"
    android:title="@string/settings_heading_alarm_interval" />
<ListPreference
    android:defaultValue="1"
    android:dialogTitle="@string/settings_heading_alarm_type"
    android:entries="@array/alarm_type_entries"
    android:entryValues="@array/alarm_type_values"
    android:key="alarm_type"
    android:title="@string/settings_heading_alarm_type"
/>

<CheckBoxPreference
    android:key="alarm_vibrate_only"
    android:title="@string/settings_heading_silent" />

<RingtonePreference
    android:dependency="alarm_vibrate_only"
    android:key="alarm_tone"
    android:title="@string/settings_heading_alarm_tone"
    android:showDefault="true"
    android:showSilent="true"/>

</PreferenceScreen>

When I navigate to SettingsActivity I get the following error log:

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Object.equals(java.lang.Object)' on a null object reference
        at android.preference.ListPreference.findIndexOfValue(ListPreference.java:231)
        at android.preference.ListPreference.getValueIndex(ListPreference.java:240)
        at android.preference.ListPreference.getEntry(ListPreference.java:218)
        at android.preference.ListPreference.getSummary(ListPreference.java:164)
        at android.preference.Preference.onBindView(Preference.java:550)
        at android.preference.Preference.getView(Preference.java:489)
        at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:246)
        at android.widget.AbsListView.obtainView(AbsListView.java:2344)
        at android.widget.ListView.makeAndAddView(ListView.java:1864)
        at android.widget.ListView.fillDown(ListView.java:698)
        at android.widget.ListView.fillFromTop(ListView.java:759)
        at android.widget.ListView.layoutChildren(ListView.java:1659)
        at android.widget.AbsListView.onLayout(AbsListView.java:2148)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:494)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
        at android.view.View.layout(View.java:15596)
        at android.view.ViewGroup.layout(ViewGroup.java:4966)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

From my understanding, I'm implementing a PreferenceFragment exactly as per the Android guide, and I can't find anything in the error log that tells me where to look for a problem (most likely because I'm still a beginner). Since I've seen just about every Question remotely related to what I'm dealing with, it may be worth noting that I'm running Lollipop, and I'm using Theme.Appcompat.Light. The rest of my App works well, so I don't understand how the theme could be the problem.

Thanks, and let me know if I can provide more info.

Edit:

Here are the are the values taken from my string_arrays.xml file:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string-array name="alarm_type_entries">
    <item name="alarm_continuous">Continuous</item>
    <item name="alarm_single">Sound Once</item>
    <item name="alarm_minute">Sound Each Minute</item>
</string-array>

<string-array name="alarm_type_values">

    <item name="continuous">1</item>
    <item name="single">2</item>
    <item name="minute">3</item>

</string-array>

<string-array name="alarm_interval_entries">

    <item name="interval_fifteen">15 Minutes</item>
    <item name="interval_thirty">30 Minutes</item>
    <item name="interval_forty_five">45 Minutes</item>
    <item name="interval_one_hour">1 Hour</item>
    <item name="interval_two_hours">2 Hours</item>
    <item name="interval_three_hours">3 Hours</item>

</string-array>

<integer-array name="alarm_interval_values">

    <item name="fifteen">15</item>
    <item name="thirty">30</item>
    <item name="forty_five">45</item>
    <item name="one_hour">60</item>
    <item name="two_hours">120</item>
    <item name="three_hours">180</item>

</integer-array>
</resources>
like image 827
Ryan Avatar asked Jan 22 '15 16:01

Ryan


1 Answers

Credit should go to njzk2 for pointing out that it was a problem with a ListPreference finding a null value. It turns out that one of the Arrays was stored as an "integer-array" instead of a "string-array". Changing that fixed the problem.

like image 100
Ryan Avatar answered Oct 05 '22 23:10

Ryan