J'essaie d'utiliser les préférences partagées pour stocker mes paramètres d'applications, mais même si j'ai essayé de copier le tutoriel mieux que je peux je ne peux toujours pas le faire fonctionner. Voici les parties de ma classe:Problème étrange avec les préférences partagées dans Android
public class ActivitySettings extends PreferenceActivity {
@SuppressWarnings("unused")
private static String TAG = "ActivitySettings";
private static final String PREFS_NAME = "preferences";
private static final String DISABLE_CHECK = "disableCheck";
private static final String ALWAYS_CONFIRM = "alwaysConfirm";
private static final String NEVER_CONFIRM = "neverConfirm";
private static final String SHOW_NOTIFICATION = "showNotification";
private static final String SHOW_ON_BOOT = "showOnBoot";
private static final String HIDE_ICON = "hideIcon";
private static final String LOGGING = "logging";
private Context context = this;
private CheckBoxPreference disableCodeCheck;
private CheckBoxPreference alwaysAskForConf;
private CheckBoxPreference neverAskForConf;
private CheckBoxPreference showNotif;
private CheckBoxPreference showAtBoot;
private CheckBoxPreference hideIcon;
private Preference exportData;
private Preference importData;
private Preference cleanUp;
private Preference reset;
private CheckBoxPreference logging;
private boolean isDisableCodeCheck;
private boolean isAlwaysAskForConf;
private boolean isNeverAskForConf;
private boolean isShowNotif;
private boolean isShowAtBoot;
private boolean isHideIcon;
private boolean isLogging;
private void loadPreferences() {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
isDisableCodeCheck = prefs.getBoolean(DISABLE_CHECK, false);
isAlwaysAskForConf = prefs.getBoolean(ALWAYS_CONFIRM, false);
isNeverAskForConf = prefs.getBoolean(NEVER_CONFIRM, false);
isShowNotif = prefs.getBoolean(SHOW_NOTIFICATION, false);
isShowAtBoot = prefs.getBoolean(SHOW_ON_BOOT, false);
isHideIcon = prefs.getBoolean(HIDE_ICON, false);
isLogging = prefs.getBoolean(LOGGING, false);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
disableCodeCheck = (CheckBoxPreference) findPreference("disable_code_check");
alwaysAskForConf = (CheckBoxPreference) findPreference("always_ask_for_conf");
neverAskForConf = (CheckBoxPreference) findPreference("never_ask_for_conf");
showNotif = (CheckBoxPreference) findPreference("show_notif");
showAtBoot = (CheckBoxPreference) findPreference("show_at_boot");
hideIcon = (CheckBoxPreference) findPreference("hide_icon");
exportData = findPreference("exp");
importData = findPreference("imp");
cleanUp = findPreference("clean_up");
reset = findPreference("reset");
logging = (CheckBoxPreference) findPreference("logging");
loadPreferences();
//here are also booleans modified
@Override
protected void onStop() {
super.onStop();
savePreferences();
}
private void savePreferences() {
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
prefs.edit().putBoolean(DISABLE_CHECK, isDisableCodeCheck);
prefs.edit().putBoolean(ALWAYS_CONFIRM, isAlwaysAskForConf);
prefs.edit().putBoolean(NEVER_CONFIRM, isNeverAskForConf);
prefs.edit().putBoolean(SHOW_NOTIFICATION, isShowNotif);
prefs.edit().putBoolean(SHOW_ON_BOOT, isShowAtBoot);
prefs.edit().putBoolean(HIDE_ICON, isHideIcon);
prefs.edit().putBoolean(LOGGING, isLogging);
prefs.edit().commit();
}
}
Voici ce qui se passe:
il y a deux fichiers créés dans shared_prefs: preferences.xml et packagename_preferences.xml. Je ne sais pas pourquoi, PREFS_NAME est fourni.
paramètres de chargement est effectué onCreate methos, épargne et commiting dans onStop
en utilisant adb shell et le chat que je suis à la recherche dans des fichiers alors que l'application est en cours d'exécution et est le scénario ici:
- je ouvre les paramètres et cochez sth et packagename_preferences.xml est créé avec la valeur correcte
- je presse en arrière et le second fichier est créé - preferences.xml qui ressemble à ceci:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map />
- quand j'ouvre à nouveau les réglages tout ressemble à la première exécution et les valeurs dans packagename_preferences.xml sont changées par défaut (?)
Je sais qu'il ya et construit dans le mécanisme pour PreferenceActivity mais je ne veux pas utilisez-le car j'ai besoin d'accéder à d'autres paramètres d'autres activités.
EDIT
J'ai créé cette application:
package pl.test;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
public class TestActivity extends Activity {
String s = "0";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SharedPreferences sp = getSharedPreferences("pref", 0);
s = sp.getString("setting2", "1");
s = "5";
}
@Override
public void onStop() {
super.onStop();
SharedPreferences sp = getSharedPreferences("pref", 0);
sp.edit().putString("setting2", s);
sp.edit().commit();
}
}
Et il ne fonctionne pas n'enregistre pas seulement chaîne à pref .xml. Qu'est-ce qui ne va pas!?
Cela n'a pas aidé. Cependant, deux fichiers sont créés et les paramètres ne sont pas chargés. – BartoszCichecki
La réponse a été modifiée - Elle devrait fonctionner maintenant. –
Merci Chris. Ça marche pour moi. – Rockystech