2010-03-23 42 views
0

我被困在一个点,我试图让我的项目读取一个首选项值(从ListPreference列表),然后在基本数学中使用该值减法实例。问题在于我的Java代码没有看到“seek”首选项,但默认值是(我尝试使用默认值3000,现在为0)。我错过了什么,这里有一个错误,知道或未知?getSharedPreferences对ListPreferences和Integers不适合我,关注ListPreferences和Integer

这里是我的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> 

让我知道如果你需要看到更多的代码,以弄清楚这一个

预先感谢,可以提供任何帮助。我已经在这个问题上工作了几个小时,并且我被烧了,第二双眼睛将会非常感激。

回答

0

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

我认为错误是你指定一个比的设置已保存过一个不同的文件:

尝试改变这一点:

SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

SharedPreferences preferences = PreferenceManager 
       .getDefaultSharedPreferences(context); 
+0

感谢您的意见,请裸露在我身上。我已更改为SharedPreferences首选项= PreferenceManager .getDefaultSharedPreference(getBaseContext());不过,我正在直接在手机上进行调试。我看到了我的项目的路径,但它在F:\ data \ com.mypackage中,我看到的只是应该写入该目录的一个文件(工作正常,无论是读取还是写入)。 PS。我安装了手机的SD,是否能够提供准确的路径视图,还是需要按照您在此处提到的adb路线进行操作?再次感谢您的帮助。 – user227604 2010-03-23 23:45:03

+0

你正在做的很好,检查pref文件并在编辑器中打开,并检查键是否存在并保存正确的值。 – Pentium10 2010-03-23 23:51:30

+0

它看起来像正确序列化的值。我在EditPlus 3中打开它并查看android:key =“@ string/seek”。它也在res/xml目录中。 – user227604 2010-03-24 00:00:46

2

我已经解决了这个问题。事实证明,我的项目是用“_”字符命名的,一旦我重构了下划线(并使用了getDefaultSharedPreferences选项),所有工作都应该如此。

这个问题吸收了我30个小时的时间!