2011-06-09 69 views
0

我嘗試訪問Service中的SharedPreferences。但是,當它第一次啓動時,我嘗試閱讀首選項,我只獲得默認值,就好像不存在首選項一樣。但是,在我第一次打開我的首選項活動後,服務會獲取值。這是正常的嗎?SharedPreferences:何時創建?

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    <PreferenceCategory 
     android:key="CATEGORY_UPDATE" 
     android:title="@string/autoUpdateCategory_title"> 
     <CheckBoxPreference 
      android:key="PREF_AUTO_UPDATE" 
      android:title="@string/preferences_autoUpdate_title" 
      android:summary="@string/preferences_autoUpdate_summary" 
      android:defaultValue="true"> 
     </CheckBoxPreference> 
     <ListPreference 
      android:key="PREF_UPDATE_FREQ" 
      android:title="@string/preferences_updateFreq_title" 
      android:summary="@string/preferences_updateFreq_summary" 
      android:dialogTitle="@string/preferences_updateFreq_title" 
      android:entryValues="@array/updateFreq_values" 
      android:entries="@array/updateFreq_options" 
      android:defaultValue="30"> 
     </ListPreference> 
    </PreferenceCategory> 
</PreferenceScreen> 


public class Preferences extends PreferenceActivity { 

    public static final String PREF_AUTO_UPDATE = "PREF_AUTO_UPDATE"; 
    public static final String PREF_UPDATE_FREQ = "PREF_UPDATE_FREQ"; 

    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 
    } 
} 


/* INSIDE SERVICE */ 
     Context context = getApplicationContext(); 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 

     boolean autoUpdate = 
       prefs.getBoolean(Preferences.PREF_AUTO_UPDATE, false); 
     int updateFreq =Integer.parseInt(prefs.getString(Preferences.PREF_UPDATE_FREQ, "0")); 

在第一次服務啓動期間,我得到0和false,儘管默認值。在去偏好活動後,一切都很好。

+1

您的代碼在哪裏設置共享首選項? – fredw 2011-06-09 19:30:21

+0

我已更新我的原始帖子。 – 2011-06-09 19:35:56

回答

1

我敢肯定,XML中提供的默認值是用於UI的,而不是用於創建「默認首選項文件」。如果您希望在尚未創建您的首選項文件時返回默認值,只需檢索它們並指定您想要的值:

boolean autoUpdate = 
     prefs.getBoolean(Preferences.PREF_AUTO_UPDATE, true); 
    int updateFreq =Integer.parseInt(
     prefs.getString(Preferences.PREF_UPDATE_FREQ, "30")); 
+0

這就是我想弄清楚的:直到我啓動我的PreferenceActivity,默認首選項不存在? – 2011-06-09 19:49:27

+0

沒有。直到你保存它的首選項,它們自己的文件將不存在。可能有辦法提供一個首選XML文件與你的應用程序包,但我不會這樣做。 – dmon 2011-06-09 19:53:50

0

正常行爲是一旦你提交到sharedPreferences中,無論是來自活動還是服務,你都可以在以後閱讀。 這裏可能的問題可能是 1)您正在清除您的偏好,否則重新插入偏好到活動,所以現在服務可以讀取它。或
2)首選項名稱不匹配。

+0

我得到了一切正常工作,只要我打開我的PrefreneceActivity一次。 – 2011-06-09 19:42:31

相關問題