Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表首选项';s getString返回索引(作为字符串),而不是XML中的my string值_Java_Android_Enums_Sharedpreferences_Listpreference - Fatal编程技术网

Java 列表首选项';s getString返回索引(作为字符串),而不是XML中的my string值

Java 列表首选项';s getString返回索引(作为字符串),而不是XML中的my string值,java,android,enums,sharedpreferences,listpreference,Java,Android,Enums,Sharedpreferences,Listpreference,好的,我使用PreferenceFragment的一般设置似乎是正确的,但是,我正在尝试在启动时从我的SharedReferences读取一个值。该值将映射到我创建的Enum 我的第一种方法是获取字符串数组(我的字符串数组值)的索引(如字符串)。因此,我将索引作为字符串,并将其转换为整数。然后我会得到我所有的字符串数组字符串,并在正确的索引处获取一个。从那里我会做一个Enum.valueOf(String)。沃利亚…完成了 这似乎是一个很大的开销,我想我可以摆脱所有的索引中间人的东西。因此,我将

好的,我使用
PreferenceFragment
的一般设置似乎是正确的,但是,我正在尝试在启动时从我的
SharedReferences
读取一个值。该值将映射到我创建的
Enum

我的第一种方法是获取
字符串数组
(我的字符串数组值)的索引(如
字符串
)。因此,我将索引作为字符串,并将其转换为
整数。然后我会得到我所有的
字符串数组
字符串,并在正确的索引处获取一个。从那里我会做一个
Enum.valueOf(String)
。沃利亚…完成了

这似乎是一个很大的开销,我想我可以摆脱所有的
索引
中间人的东西。因此,我将所有
字符串数组值
从字符串数字更改为表示
枚举
名称的字符串

但是,这仍然将索引作为字符串提供给我。为什么? 我的值不能有实际字符串吗?

代码 XML

在一个新角色之后
一句话之后
3个字符之后
没有一个
性格
单词
缓冲器
词组


...

您是否清除了应用程序的数据或重新安装了应用程序以清除旧的首选项?最终,这就是问题所在。我以前知道清除应用程序数据,以前也做过,但这次失败了。不管怎样,我还是回到了原来的方式,它起了作用。然后它就停止工作了,因为它最终切换到了“缓冲区”。所以我重新实现了我的新方法并清除了所有的数据。现在一切都很好,除了我发布的一些其他问题
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    PreferenceManager.setDefaultValues(getBaseContext(), R.xml.preferences, false);

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);

    // Assigns enumString the value of "2", not "BUFFER". This is my issue!
    String enumString = pref.getString(
            getString(R.string.pref_search_method_key),
            Search.BUFFER.name());

    searchMethod = Search.valueOf(enumString);

}
<string-array name="search_method">
    <item>After a New Character</item>
    <item>After a Word</item>
    <item>After 3 Characters</item>
    <item>None</item>
</string-array>

<!-- Before I gave these the values 0, 1, 2, 3  -->
<string-array name="search_method_values">
    <item>CHARACTER</item>
    <item>WORD</item>
    <item>BUFFER</item>
    <item>PHRASE</item>
</string-array>
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:title="@string/pref_header_search">

        <ListPreference
            android:key="@string/pref_search_method_key"
            android:title="@string/pref_search_method"
            android:summary="@string/pref_search_method_description"
            android:defaultValue="BUFFER"
            android:entries="@array/search_method"
            android:entryValues="@array/search_method_values" />

    </PreferenceCategory>

    ...

</PreferenceScreen>