ListPreference抛出了空指针异常。

6

我有一个ListPreference:

    <ListPreference
        android:entries="@array/frequencies"
        android:entryValues="@array/frequencies_values"
        android:key="pref_key_frequencies"
        android:summary="@string/frequency_pref_summary"
        android:title="@string/frequency_pref_title" />

@array/frequencies:

<string-array name="frequencies">
    <item>5 minutes</item>
    <item>10 minutes</item>
    <item>15 minutes</item>
    <item>20 minutes</item>
    <item>30 minutes</item>
    <item>60 minutes</item>
</string-array>

@数组/频率值

<integer-array name="frequencies_values">
    <item>300</item>
    <item>600</item>
    <item>900</item>
    <item>1200</item>
    <item>1800</item>
    <item>3600</item>
</integer-array>

对话框中的元素显示正确。但如果我尝试frequencyListPreference.setValueIndex(0);,就会得到一个NullPointerException。即使我在我的代码中什么都不做,如果我点击列表中的其中一个元素,我也会得到:
    java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference

如果我检查数组frequencyListPreference.getEntryValues()中的一个元素的值,它总是为空。

我做错了什么?


你在哪里创建了 frequencyListPreference 对象? - krishna
在我的Fragment中,使用以下代码获取频率列表偏好设置:(ListPreference) findPreference("pref_key_frequencies"); - andrew
好的,我最近使用了ListPreference 一些检查: 1)在onCreate中是否添加了addPreferencesFromResource(R.xml.preferences); 2)并且在activity中,您是否执行了以下操作 getFragmentManager().beginTransaction() .replace(android.R.id.content, new MyPreferencesFragment()) .commit(); - krishna
我还有其他四个选项,它们都可以很好地工作。 - andrew
那我不知道你的代码出了什么问题。 - krishna
1个回答

15
据我所知,Android仅接受字符串数组而不是整数。 改变
<integer-array name="frequencies_values">
    <item>300</item>
    <item>600</item>
    <item>900</item>
    <item>1200</item>
    <item>1800</item>
    <item>3600</item>
</integer-array>

<string-array name="frequencies_values">
    <item>300</item>
    <item>600</item>
    <item>900</item>
    <item>1200</item>
    <item>1800</item>
    <item>3600</item>
</string-array>

在您的代码中读取Preference时,请使用Integer.parseInt()将值转换为可用的整数。

有关更多详细信息,请参见以下内容:ListPreference:使用string-array作为条目和integer-array作为条目值不起作用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接