【问题标题】:getSharedPreferences not working for me with concerns to ListPreferences and IntegersgetSharedPreferences 不适用于我对 ListPreferences 和 Integers 的担忧
【发布时间】:2011-01-30 23:49:20
【问题描述】:

我正试图让我的项目读取偏好值(来自 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>

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

提前感谢您提供的任何帮助。我已经为这个问题工作了几个小时,但我已经被烧死了,非常感谢您再看一眼。

【问题讨论】:

    标签: android sharedpreferences integer listpreference


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      尝试改变这个:

      SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
      

      SharedPreferences preferences = PreferenceManager
                      .getDefaultSharedPreferences(context);
      

      【讨论】:

      • 感谢您的意见,请与我联系。我已更改为 SharedPreferences preferences = PreferenceManager .getDefaultSharedPreference(getBaseContext());但是,我直接在手机上调试。我看到了我的项目的路径,但它位于 F:\data\com.mypackage 并且我所看到的只是应该写入该目录的一个文件(它工作正常,读取和写入它)。附言。我安装了手机的 SD,这会给我一个准确的路径视图还是我需要按照您在此处指出的那样走 adb 路线?再次感谢您的帮助。
      • 你做得很好,检查 pref 文件并在编辑器中打开,并检查密钥是否存在并保存正确的值。
      • 看起来值正确序列化了。我在 EditPlus 3 中打开它并看到 android:key="@string/seek"。它也在 res/xml 目录中。
      • 我注意到的一件事是,当我第一次启动这个项目时,我创建了preferences.xml 和Preferences.java(注意大写的“P”字符)。这会是一个问题吗?我没有看到任何设计时错误,运行时也没有。
      • 哦,我只是在阅读您的问题。正在写入的文件是另一个文件 (.3gpp)。我在手机上的项目目录中看不到任何其他文件。很抱歉造成混乱。
      猜你喜欢
      • 2014-11-01
      • 1970-01-01
      • 2011-03-01
      • 2012-12-25
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      相关资源
      最近更新 更多