2013-01-14 28 views
1

我遇到了一些問題SharedPreferences。看起來他們不是共享的低谷我不同的活動(例如我的偏好是從我的其他活動保存在我的PreferencesActivity但不可用)SharedPreferences不按預期方式工作

這裏是我的PrefencesActivity代碼:

public class SettingsActivity extends SherlockPreferenceActivity { 

    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      // Creating the ActionBar 
      ActionBar mActionBar = getSupportActionBar(); 
      mActionBar.setHomeButtonEnabled(true); 
      mActionBar.setDisplayShowHomeEnabled(true); 
      mActionBar.setDisplayHomeAsUpEnabled(true); 

      // Getting the preferences 
      SharedPreferences preferences = getApplicationContext().getSharedPreferences("PreferencesFile", getApplicationContext().MODE_PRIVATE); 
      getPreferenceManager().setSharedPreferencesName("PreferencesFiles"); 
      addPreferencesFromResource(R.xml.preferences); 
    } 
} 

偏好.xml文件:

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

    <PreferenceCategory 
      android:title="Informations utilisateur"> 

     <EditTextPreference 
       android:key="id_utilisateur" 
       android:title="Identifiant" 
       android:summary="Votre identifiant Hangin\'Around" 
       android:dialogTitle="Identifiant Hangin\'Around :" /> 

     <EditTextPreference 
       android:key="mdp_utilisateur" 
       android:title="Mot de passe" 
       android:summary="Votre mot de passe sur Hangin\'Around" 
       android:dialogTitle="Mot de passe Hangin\'Around :" /> 

    </PreferenceCategory> 

    <PreferenceCategory 
      android:title="Alerte de chute"> 
     <EditTextPreference 
       android:key="num_contact" 
       android:title="Numéro à contacter" 
       android:summary="Le numéro auquel un SMS sera envoyé en cas de chute" 
       android:dialogTitle="Numéro à contacter en cas de chute :" /> 

     <EditTextPreference 
       android:key="nom" 
       android:title="Nom présenté" 
       android:summary="Le nom auquel vous serez présenté à votre contact" 
       android:dialogTitle="Nom présenté :" /> 

     <CheckBoxPreference 
       android:key="confirm" 
       android:title="Confirmation de le chute" 
       android:summary="Affichera un message vous demandant de confirmer l'envoi d'un message d'alerte de chute" /> 
    </PreferenceCategory> 

    <PreferenceCategory 
      android:title="Gestion des modèles de mouvement"> 

     <PreferenceScreen 
       android:title="Enregistrer un nouveau modèle"> 
      <intent android:action=".EnregistrementActivity"/> 
     </PreferenceScreen> 

     <PreferenceScreen 
       android:title="Gérer les modèles de mouvement"> 
      <intent android:action=".GestionModelesActivity"/> 
     </PreferenceScreen> 

    </PreferenceCategory> 

</PreferenceScreen> 

這裏就是我得到的喜好在我的活動:

protected void onCreate(Bundle savedInstanceState) { 
    //creating the activity and stuffs 

    // Getting my preferences 
    SharedPreferences preferences = getApplicationContext().getSharedPreferences("PreferencesFile", getApplicationContext().MODE_PRIVATE); 
    numContact = preferences.getString("num_contact", null); 
    nomUser = preferences.getString("nom", null); 
    confirm = preferences.getBoolean("confirm", false); 
    modeleChute = preferences.getString("modele_chute", null); 

    Log.d(TAG, "numContact = " + numContact + " - nomUser = " + nomUser + " - modeleChute = " + modeleChute); 
} 

和日誌顯示(modeleChute來自另一個活動):

01-14 17:04:40.444: D/MainActivity(13277): numContact = null - nomUser = null - modeleChute = Immobile 

我做錯什麼了嗎? (我猜是這樣)

回答

2

變化

SharedPreferences preferences = getApplicationContext().getSharedPreferences("PreferencesFile", getApplicationContext().MODE_PRIVATE); 

到:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context) 

更新:原因是XML首選的默認實現將保存到您的defaultSharedPreferences,而不是你所定義的一個。如果真的需要,您可以使用
setDefaultValues更改默認值。

+0

它的工作原理,謝謝;) –

+0

它爲什麼工作,順便說一句?不應該讓getSharedPreferences(String,int)給你一個關於前綴名的選擇,所以你可以有幾個? – njzk2

+0

@ njzk2更新於回覆 – wtsang02