Note: je suis épuisé au milieu de mon ambition
La préférence partagée API standard est bien! Cela dépend de l'échelle de l'application, mais c'est très fiable quand c'est comme "DB et c'est un bordel !!!!!!!". Puisque le type primitif est supprimé, de petits indicateurs peuvent être enregistrés. Même si je mets à jour l'application, c'est de la merde. Comme il est enregistré au format xml, vous pouvez facilement voir le contenu. Tu l'as fait!
Voici une application qui gère les paramètres dans les préférences partagées. Le nombre de clés est supérieur à 100. Les clés sont dispersées partout, comme être écrites dans une classe constante, devenir une constante dans Activity ou être écrites directement.
sharedPreference.getAll.toString()
Si vous parvenez à regarder à l'intérieur de la préférence partagée, vous la fermerez. À partir de maintenant, vous devez grep chaque clé, la récupérer et déchiffrer la signification des clés et des valeurs. C'est dur.
Je pense que la plupart des problèmes causés par SharedPreference sont dus à la gestion des clés. Même si elles sont regroupées en une classe constante, si plusieurs personnes la modifient, il est possible de définir par inadvertance la même clé que celle existante. C'est pénible de devoir aller aux endroits que j'utilise pour vérifier le type de valeur de cette clé.
Comme titre de l'article. Je veux que vous utilisiez ʻEnum.name () `.
Toutes les clés sont définies dans la même classe enum. Vous pouvez voir en un coup d'œil quelle clé est définie.
Si le nom de la définition est couvert, il ne sera pas compilé en premier lieu, vous pouvez donc être assuré.
Si vous créez une classe enum pour chaque groupe de clés, les clés ne seront pas mélangées et gâchées.
Au fait, ʻEnum.name () au lieu de ʻEnum.toString ()
est parce que @ Override
ne peut pas être fait.
Il est fort possible que quelqu'un de gentil écrase toString et explique ce qu'il contient.
Je souhaite personnellement pouvoir le faire! L'énumération de la préférence partagée est la suivante.
FoodPref.java
import android.content.Context;
import android.content.SharedPreferences;
enum FoodPref {
//Poulpe
TAKO(100),
//Chat
NEKO(200),
//Là
SOKO(300);
//Valeur par défaut.
public final Object DEF;
FoodPref(Object def) {
this.DEF = def;
}
//Préférence partagée pour cette énumération uniquement
public static SharedPreferences getThisPreference(final Context context) {
return context.getSharedPreferences(FoodPref.class.getSimpleName(), Context.MODE_PRIVATE);
}
}
Comment utiliser
//Créer
SharedPreferences foodSp = FoodPref.getThisPreference(context);
//Éteindre
int cat = foodSp.getInt(FoodPref.NEKO.name(), (Integer) FoodPref.NEKO.DEF);
//Mettre en
foodSp.edit().putInt(FoodPref.SOKO.name(), 666).apply();
//Même s'il augmente de différentes manières
SharedPreferences toySp = ToyPref.getThisPreference(context);
//Parce qu'il est enregistré séparément
SharedPreferences carSp = CarPref.getThisPreference(context);
//Il n'y a aucun risque de mélange des valeurs
SharedPreferences bookSp = BookPref.getThisPreference(context);
La valeur par défaut est Object "Je sais avec certitude quel type correspond à cette clé." "N'hésitez pas sur la valeur par défaut au moment de l'acquisition" Compte tenu du mérite, je pense que la direction de la définition de la valeur par défaut de la clé est correcte, mais Il est impardonnable que l'appelant ait besoin d'un casting. null ne peut pas être la valeur par défaut. Vous pouvez corriger la valeur de retour en regroupant SharedPreferences par type de valeur, mais si possible, je voudrais regrouper les clés avec enum comme un groupe de significations. Je l'ai essayé avec Kotlin mais il a juste changé Object en Any. Y a-t-il un moyen si je suis compétent?
Pourtant, je vais mettre la clé directement dans String! Il peut être préférable de créer une classe wrapper qui prend uniquement l'énumération définie comme argument.
Je souhaite reprendre le prix d'un projet existant Je n'ai pas d'autre choix que de faire de mon mieux
Je serais heureux si quelqu'un pouvait faire quelque chose de mieux!
Recommended Posts