0

我被困在我试图让我的项目读取偏好值(来自 ListPreference 列表),然后在基本的数学减法实例中使用该值。问题是我的 Java 代码没有看到“seek”首选项,但默认值是(我尝试使用 3000 和现在 0 的默认值)。我错过了什么吗,这里有已知或未知的错误吗?

这是我的 Java 代码块,问题在其中表现出来:

public static final String PREF_FILE_NAME = "preferences";
seekback.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View view) {
try {  
 SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
 Integer storedPreference = preferences.getInt("seek", 0);

(mediaPlayer.getCurrentPosition()-storedPreference);

} catch (Exception e) {
 e.printStackTrace();
}
 }
});

以下是我的项目的其他一些代码位:

从首选项文件:

 <ListPreference
 android:entries="@array/seconds"
 android:entryValues="@array/seconds_values"
 android:summary="sets the seek interval for the seekback and seekforward buttons"
 android:title="Seek Interval"
 android:defaultValue="5000"
 android:key="@string/seek">
 </ListPreference>

从字符串文件:

<string name="seek">seek</string>

从数组文件:

<resources>
    <string-array
      name="seconds">
      <item>Five seconds</item>
      <item>Fifteen seconds</item>
      <item>Thirty seconds</item>
      <item>Sixty seconds</item>
    </string-array>
    <string-array
      name="seconds_values">
      <item>5000</item>
      <item>15000</item>
      <item>30000</item>
      <item>60000</item>
    </string-array>
</resources>

如果您需要查看更多代码来解决这个问题,请告诉我

提前感谢您提供的任何帮助。我已经为这个问题工作了几个小时,我被烧死了,第二双眼睛会非常感激。

4

2 回答 2

2

我已经解决了这个问题。事实证明,我的项目是用“_”字符命名的,一旦我重构了下划线(并使用了 getDefaultSharedPreferences 选项),一切正常。

这个问题占用了我30个小时的时间!

于 2010-04-04T02:26:09.017 回答
0

确保将 ListPreference 值存储在相同的文件中。启动adb滚动到cd /data/data/com.your.package并查找类型首选项的文件夹和文件。

我认为错误在于您指定的文件与保存设置的文件不同:

尝试改变这个:

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

SharedPreferences preferences = PreferenceManager
                .getDefaultSharedPreferences(context);
于 2010-03-23T20:30:42.997 回答