Comment puis-je obtenir les SharedPreferences d'un PreferenceActivity dans Android?
-
26-09-2019 - |
Question
J'utilise un PreferenceActivity pour montrer certains paramètres de mon application. Je Gonflage les paramètres via un fichier xml pour que mon onCreate (et les méthodes de classe complète) ressemble à ceci:
public class FooActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.preference);
}
}
Le javadoc de PreferenceActivity PreferenceFragment déclare que
Ces préférences sauveront automatiquement SharedPreferences lorsque l'utilisateur interagit avec eux. Pour récupérer une instance de SharedPreferences que la hiérarchie des préférences dans cette activité utilisera, getDefaultSharedPreferences d'appel (android.content.Context) avec un contexte dans le même paquet que cette activité.
Mais comment je reçois le nom du SharedPreference dans une autre activité? Je ne peux appeler
getSharedPreferences(name, mode)
dans l'autre activité, mais je dois le nom du SharedPreference qui a été utilisé par le PreferenceActivity. Quel est le nom ou comment puis-je le récupérer?
La solution
import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);
Mise à jour
Selon Préférences partagées | Applications du développeur Tutorial (partie 13) par Sai Geetha M N,
De nombreuses applications peuvent fournir un moyen de saisir les préférences de l'utilisateur sur le les paramètres d'une application spécifique ou une activité. pour soutenir cela, Android fournit un ensemble simple d'API.
Préférences sont typiquement des paires de valeurs de nom. Ils peuvent être stockés sous forme de « Préférences partagées » à travers diverses activités dans une application (note Actuellement, il ne peut pas être partagée entre les processus). Ou il peut être quelque chose qui doit être stocké spécifique à une activité.
-
Préférences partagées. Les préférences partagées peuvent être utilisées par toutes les composantes (activités, services, etc.) des applications
-
Préférences traitées Activité:. Ces préférences ne peuvent être utilisés dans l'activité particulière et ne peuvent être utilisés par d'autres composants de l'application
Préférences partagées:
Les préférences partagées sont gérées à l'aide de la méthode de getSharedPreferences
de la classe Context
. Les préférences sont stockées dans un fichier par défaut (1) ou vous pouvez spécifier un nom de fichier (2) pour être utilisé pour faire référence aux préférences.
(1) La méthode recommandée est d'utiliser le mode par défaut, sans spécifier le nom de fichier
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
(2) Voici comment vous obtenez l'instance lorsque vous spécifiez le nom de fichier
public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
MODE_PRIVATE
est le mode de fonctionnement pour les préférences. Il est le mode par défaut et signifie que le fichier créé sera accessible seulement par l'application appelante. Deux autres modes sont supportés MODE_WORLD_READABLE
et MODE_WORLD_WRITEABLE
. Dans MODE_WORLD_READABLE
autre application peut lire le fichier créé, mais ne peut pas le modifier. En cas de MODE_WORLD_WRITEABLE
d'autres applications ont également des autorisations d'écriture pour le fichier créé.
Enfin, une fois que vous avez l'instance de préférences, voici comment vous pouvez récupérer les valeurs stockées des préférences:
int storedPreference = preferences.getInt("storedInt", 0);
Pour les valeurs magasin dans le fichier de préférences objet SharedPreference.Editor
doit être utilisé. Editor
est une interface imbriquée dans la classe SharedPreference
.
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Editor prend en charge également des méthodes telles que remove()
et clear()
pour supprimer les valeurs de préférence à partir du fichier.
Préférences d'activité:
Les préférences partagées peuvent être utilisées par d'autres composants de l'application. Mais si vous n'avez pas besoin de partager les préférences avec d'autres composants et que vous souhaitez avoir une activité préférences privées, vous pouvez le faire avec l'aide de la méthode de getPreferences()
de l'activité. La méthode getPreference
utilise la méthode getSharedPreferences()
avec le nom de la classe d'activité pour le nom du fichier de préférence.
Voici le code pour obtenir les préférences
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);
Le code pour stocker des valeurs est également le même que dans le cas des préférences partagées.
SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();
Vous pouvez également utiliser d'autres méthodes telles que le stockage de l'état d'activité dans la base de données. Remarque Android contient également un package appelé android.preference
. Le package définit les classes pour mettre en œuvre les préférences de l'application UI.
Pour voir quelques exemples vérifier stockage de données afficher sur le site des développeurs.
Autres conseils
Si vous n'avez pas accès à getDefaultSharedPreferenes()
, vous pouvez utiliser getSharedPreferences(name, mode)
à la place, il vous suffit de passer dans le nom.
Android crée ce nom (peut-être basé sur le nom du package de votre projet?). Vous pouvez l'obtenir en plaçant le code suivant dans un SettingsActivity
de onCreate()
, et de voir ce que preferencesName
est.
String preferencesName = this.getPreferenceManager().getSharedPreferencesName();
La chaîne doit être quelque chose comme com.example.projectname_preferences
. Code dur que quelque part dans votre projet, et le transmettre pour getSharedPreferences()
et vous devriez être bon d'aller.
Déclarer ces méthodes d'abord ..
public static void putPref(String key, String value, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}
public static String getPref(String key, Context context) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(key, null);
}
Ensuite, appelez quand vous voulez mettre un pref:
putPref("myKey", "mystring", getApplicationContext());
appeler quand vous voulez obtenir un pref:
getPref("myKey", getApplicationContext());
ou vous pouvez utiliser cet objet https: //github.com/kcochibili/TinyDB--Android-Shared-Preferences-Turbo ce qui simplifie encore tout
Exemple:
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
devoir passer contexte autour de partout est vraiment moi ennuyeux. le code devient trop bavard et ingérable. Je le fais dans tous les projets à la place ...
public class global {
public static Activity globalContext = null;
et le mettre dans l'activité principale créer
@Override
public void onCreate(Bundle savedInstanceState) {
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
global.sdcardPath,
""));
super.onCreate(savedInstanceState);
//Start
//Debug.startMethodTracing("appname.Trace1");
global.globalContext = this;
aussi toutes les clés de la préférence doit être indépendant de la langue, je ne suis personne choqué a mentionné que.
getText(R.string.yourPrefKeyName).toString()
appeler très simplement comme ça dans une ligne de code
global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);
si vous avez une case à cocher et que vous souhaitez récupérer sa valeur-à-dire vrai / faux dans un fichier java -
Utilisation -
Context mContext;
boolean checkFlag;
checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`
Mise à jour 2019
Vous pouvez simplement utiliser la bibliothèque de PowerPreference
https://github.com/AliEsaAssadi/Android-Power-Preference
Obtenir instance de préférence partagée
Pour l'instance par défaut, vous devez appeler simplement
PowerPreference.getDefaultFile()
Ou si vous voulez un fichier de préférences spécifiques
PowerPreference.getFileByName(fileName)
Écriture de données:
PowerPreference.getDefaultFile().put(key,value)
Obtenir des données
PowerPreference.getDefaultFile().getString(key,value)