Java SharedReferences manager可以';不写也不读首选项
我创建了一个名为“reglages”(英语设置)的类,它应该能够保存任何类型活动的首选项。但它似乎无法从SharedReferences保存或返回数据: Reglages.javaJava SharedReferences manager可以';不写也不读首选项,java,android,sharedpreferences,Java,Android,Sharedpreferences,我创建了一个名为“reglages”(英语设置)的类,它应该能够保存任何类型活动的首选项。但它似乎无法从SharedReferences保存或返回数据: Reglages.java public class Reglages { // Compte utilisateur public static final String PREFERENCES_COMPTE_UTILISATEUR = "[compte_utilisateur]"; private static f
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”也不显示
如果这是文件名,那可能是个问题。访问shell并查看是否正在创建该文件。我想这些括号需要转义。您的代码中有一些我不明白的地方,为什么不更改这部分:
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();
}
我还添加了
这个
,以防您的问题由此产生。这是我在自己的应用程序上使用的代码,您可以尝试一下。请尝试更改您的设置首选项mpteutilisateur()
,如下代码所述:
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()代码>与您当前的代码相同。可能是您使用的是来自不同类的不同上下文。您可以将其作为单例使用。您没有在编辑器上调用commit
,上下文是通过getContextApplication()传递的,它可以处理其他所有内容。比静态方式更容易吗?如果您的方法是静态的,您应该直接调用Reglages.compteUtilisateurGetNom(),例如公共静态字符串getLoginInfo(上下文上下文,字符串键){SharedReferences SharedReferences=Context.GetSharedReferences(Costants.SHARED\u PREFS\u NAME,Activity.MODE\u PRIVATE);字符串用户名=SharedReferences.getString(key,null);return username;}
因为我会在同一个页面中添加更多的首选项,不同的首选项。为什么不创建不同的类呢?对于不同类型的首选项?我有9个这样的首选项。
public void compteUtilisateurSetPassword(String password){
setPreferencesCompteUtilisateur(true);
editor.putString(COMPTE_UTILISATEUR_PASSWORD, password);
editor.commit();
Log.i("compteUtilisateur", "Mot de passe = "+password);
}