1

我遇到了一些麻烦SharedPreferences。看起来它们没有通过我的不同活动共享(例如,我的偏好保存在我的活动中,PreferencesActivity但在我的其他活动中不可用)

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

难道我做错了什么 ?(大概吧)

4

1 回答 1

2

改变

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

至:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context)

更新:原因是 xml 首选项的默认实现将保存到您的 defaultSharedPreferences 而不是您定义的那个。如果确实需要,您可以使用
setDefaultValues更改默认值。

于 2013-01-14T16:32:24.447 回答