0

我创建了一个名为“reglages”(英文设置)的类,它应该能够保存任何类型的活动的偏好。但它似乎无法从 sharedPreferences 保存或返回数据:

Reglages.java

public class Reglages {

    // Compte utilisateur
    public static final String PREFERENCES_COMPTE_UTILISATEUR = "[compte_utilisateur]";
    private static final String COMPTE_UTILISATEUR_NOM = "nom";
    private static final String COMPTE_UTILISATEUR_PRENOM = "prenom";
    private static final String COMPTE_UTILISATEUR_FONCTION = "fonction";
    private static final String COMPTE_UTILISATEUR_TEL = "tel";
    private static final String COMPTE_UTILISATEUR_EMAIL = "email";
    private static final String COMPTE_UTILISATEUR_PASSWORD = "mot_de_passe";


    // -------------------------------------------------------------------------
    // Constructor
    private Context context;
    private SharedPreferences preferences;
    private SharedPreferences.Editor editor;
    private int PRIVATE_MODE = 0;

    public Reglages(Context context) {
        this.context = context;
    }

    /**
     * Met les preferences a Compte Utilisateur
     */
    private void setPreferencesCompteUtilisateur() {
        preferences = context.getSharedPreferences(PREFERENCES_COMPTE_UTILISATEUR, PRIVATE_MODE);
        editor = preferences.edit();
    }

    /* COMPTE UTILISATEURS METHODES  */

    /**
     * Ajouter ou mettre a jour le nom du compte utilisateur
     * @param nom
     */
    public void compteUtilisateurSetNom(String nom) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_NOM, nom);
        editor.commit();
        Log.i("compteUtilisateur", "Nom = " + nom);
    }
    /**
     * Retourne le nom du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetNom() {
        setPreferencesCompteUtilisateur();
        String nom = preferences.getString(COMPTE_UTILISATEUR_NOM, "0");
        return nom;
    }
    /**
     * Ajouter ou mettre a jour le prenom du compte utilisateur
     * @param prenom
     */
    public void compteUtilisateurSetPrenom(String prenom) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_NOM, prenom);
        editor.commit();
        Log.i("compteUtilisateur", "Prenom = " + prenom);
    }
    /**
     * Retourne le prenom du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetPrenom() {
        setPreferencesCompteUtilisateur();
        return preferences.getString(COMPTE_UTILISATEUR_PRENOM, "");
    }
    /**
     * Ajouter ou mettre a jour la fonction du compte utilisateur
     * @param fonction
     */
    public void compteUtilisateurSetFonction(String fonction) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_NOM, fonction);
        editor.commit();
        Log.i("compteUtilisateur", "Fonction = " + fonction);
    }
    /**
     * Retourne la fonction du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetFonction() {
        setPreferencesCompteUtilisateur();
        return preferences.getString(COMPTE_UTILISATEUR_FONCTION, "");
    }
    /**
     * Ajouter ou mettre a jour le numero de telephone du compte utilisateur
     * @param tel
     */
    public void compteUtilisateurSetTel(String tel) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_TEL, tel);
        editor.commit();
        Log.i("compteUtilisateur", "Tel = " + tel);
    }
    /**
     * Retourne le numero de telephone du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetTel() {
        setPreferencesCompteUtilisateur();
        return preferences.getString(COMPTE_UTILISATEUR_TEL, "");
    }
    /**
     * Ajouter ou mettre a jour le mail du compte utilisateur
     * @param email
     */
    public void compteUtilisateurSetEmail(String email) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_EMAIL, email);
        editor.commit();
        Log.i("compteUtilisateur", "Email = " + email);
    }
    /**
     * Retourne le mail du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetEmail() {
        setPreferencesCompteUtilisateur();
        return preferences.getString(COMPTE_UTILISATEUR_EMAIL, "");
    }
    /**
     * Ajouter ou mettre a jour le mot de passe du compte utilisateur
     * @param password
     */
    public void compteUtilisateurSetPassword(String password) {
        setPreferencesCompteUtilisateur();
        editor.putString(COMPTE_UTILISATEUR_PASSWORD, password);
        editor.commit();
        Log.i("compteUtilisateur", "Mot de passe = " + password);
    }
    /**
     * Retourne le mot de passe du compte utilisateur
     * @return
     */
    public String compteUtilisateurGetPassword() {
        setPreferencesCompteUtilisateur();
        return preferences.getString(COMPTE_UTILISATEUR_PASSWORD, "");
    }
}

所以在其他类中我应该做这样的事情来使用它:插入数据:

Reglages reglages = new Reglages(context);
reglages.compteUtilisateurSetNom("test");

要检索数据:

Reglages reglages = new Reglages(context);
String test = reglages.compteUtilisateurGetNom();

但它什么也不显示,甚至不显示默认值“0”。

4

3 回答 3

0
 public static final String PREFERENCES_COMPTE_UTILISATEUR = "[compte_utilisateur]";

如果这是文件名,那可能是个问题。访问 shell 并查看是否正在创建文件。我想这些括号需要转义。

于 2013-05-24T15:57:15.833 回答
0

您的代码中有一些我不明白的地方,为什么不更改这部分:

public Reglages(Context context) {
this.context = context;
}

private void setPreferencesCompteUtilisateur() {
preferences = context.getSharedPreferences(PREFERENCES_COMPTE_UTILISATEUR, PRIVATE_MODE);
editor = preferences.edit();
}

这样可以避免您的重复:

public Reglages(Context context) {
    this.preferences = context.getSharedPreferences(PREFERENCES_COMPTE_UTILISATEUR, Context.PRIVATE_MODE);
    this.editor = preferences.edit();
}

我还添加了this,以防您的问题来自于此。这是我在自己的应用程序上使用的代码,你可以试一试。

于 2013-05-24T15:58:34.693 回答
0

setPreferencesCompteUtilisateur()尝试按照以下代码中的说明更改您的:

private void setPreferencesCompteUtilisateur(boolean write) {
    preferences = context.getSharedPreferences(PREFERENCES_COMPTE_UTILISATEUR, PRIVATE_MODE);

    //If we are going to write a preference, we set the write variable true.
    if(write) {
        editor = preferences.edit();
    }
}

这样,当您阅读首选项时,您需要调用上述方法,如下例所示:

public String compteUtilisateurGetEmail(){
    setPreferencesCompteUtilisateur(false); //We only need to read, not write
    return preferences.getString(COMPTE_UTILISATEUR_EMAIL, "");
}

同样的原则,当您调用写入首选项方法时,您可以执行以下操作:

public void compteUtilisateurSetPassword(String password){
    setPreferencesCompteUtilisateur(true);
    editor.putString(COMPTE_UTILISATEUR_PASSWORD, password);
    editor.commit();
    Log.i("compteUtilisateur", "Mot de passe = "+password);
}

我怀疑问题在于,当您阅读共享首选项时,您总是preferences.edit();像现在一样调用代码。

于 2013-05-29T11:06:12.587 回答