【问题标题】:Android SharedPreferences integer-array of values [duplicate]Android SharedPreferences整数数组值[重复]
【发布时间】:2014-03-14 00:01:16
【问题描述】:

我正在尝试按如下方式使用 SharedPreferences

在数组.xml 中:

<resources>
    <string-array name="empty_array"/>

    <string-array name="baseLayers">
        <item>Normal</item>
        <item>Hyrbid</item>
        <item>Satellite</item>
        <item>Terrain</item>
    </string-array>

    <integer-array name="baseLayerValues">
        <item>1</item>
        <item>4</item>
        <item>2</item>
        <item>3</item>      
    </integer-array>
...

然后在偏好中:

    <PreferenceCategory android:title="MAPS" >
        <ListPreference
            android:entries="@array/baseLayers"
            android:entryValues="@array/baseLayerValues"
            android:key="baseLayer"
            android:title="Base Layer" />
   ...

但当我尝试使用设置菜单选择新选项时出现异常:

java.lang.NullPointerException
    at android.preference.ListPreference.onDialogClosed(ListPreference.java:264)
    at android.preference.DialogPreference.onDismiss(DialogPreference.java:390)
    at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1233)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4950)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
    at dalvik.system.NativeStart.main(Native Method)

关于我可能做错的任何想法?在这种情况下是否可以使用整数数组作为值数组?

【问题讨论】:

标签: android sharedpreferences


【解决方案1】:

在您的arrays.xml 文件中,只需将integer-array 更改为string-array 即可。

<resources>
    <string-array name="empty_array"/>

    <string-array name="baseLayers">
        <item>Normal</item>
        <item>Hyrbid</item>
        <item>Satellite</item>
        <item>Terrain</item>
    </string-array>

    <string-array name="baseLayerValues">
        <item>1</item>
        <item>4</item>
        <item>2</item>
        <item>3</item>      
    </string-array>

如果您想以编程方式获取项目,您必须将 String 解析为 int,如下所示:

SharedPreferences prefs = getSharedPreferences("baseLayer", 0); // the 0 is the default value
int x = Integer.parseInt(prefs.getString("baseLayer", "0"));

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2012-05-06
    • 2015-04-29
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多