ListPreference抛出NullPointerException

and*_*rew 5 java android android-preferences

我有一个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" />
Run Code Online (Sandbox Code Playgroud)

@阵列/频率:

<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>
Run Code Online (Sandbox Code Playgroud)

@阵列/ frequencies_values

<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>
Run Code Online (Sandbox Code Playgroud)

对话框中的元素正确显示.但是,如果我尝试frequencyListPreference.setValueIndex(0);我得到一个NullPointerException.即使我在代码中没有做任何事情,如果我点击列表中的一个元素,我得到:

    java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.String java.lang.CharSequence.toString()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

如果我检查数组中某个元素的frequencyListPreference.getEntryValues()值总是为null.

我究竟做错了什么?

小智 10

据我所知,Android只接受String数组而不是Integers.

更改

<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>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

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

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