[JAVA] Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference

Note: je suis épuisé au milieu de mon ambition

SharedPreference est bon!

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!

Réalité sévère

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.

Liste des dures réalités que j'ai vues

Cause

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é.

alors

Comme titre de l'article. Je veux que vous utilisiez ʻEnum.name () `.

Pas dispersé

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.

Les clés ne se dupliquent jamais

Si le nom de la définition est couvert, il ne sera pas compilé en premier lieu, vous pouvez donc être assuré.

Gérer les clés séparément en toute sécurité

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.

J'ai essayé de le faire

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);

Défis restants

Conclusion

Je serais heureux si quelqu'un pouvait faire quelque chose de mieux!

Recommended Posts

Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
Je souhaite afficher le nom de l'affiche du commentaire
Je veux que vous utilisiez Scala comme meilleur Java pour le moment
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
eclipse Je veux vraiment que vous utilisiez la touche de raccourci transcendantale recommandée (Windows)
Je veux var_dump le contenu de l'intention
Lorsque vous souhaitez utiliser la méthode à l'extérieur
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux connaître la réponse de l'application Janken
Je veux retourner la position de défilement de UITableView!
Pour ceux qui souhaitent utiliser MySQL pour la base de données dans la construction de l'environnement de Rails6 ~.
[Débutant] Je souhaite modifier le fichier de migration-Comment utiliser la restauration-
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Je souhaite utiliser la méthode de désinfection autre que View.
Je veux donner un nom de classe à l'attribut select
Je souhaite renvoyer plusieurs valeurs de retour pour l'argument saisi
[Ruby] Je souhaite inverser l'ordre de la table de hachage
Je veux limiter l'entrée en réduisant la plage de nombres
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Je veux contrôler le message d'erreur par défaut de Spring Boot
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux utiliser @Autowired dans Servlet
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Liste de réglages de Glassfish que je souhaite conserver pour le moment
Je veux connaître le JSP du portlet ouvert lors du développement de Liferay
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]
Si vous souhaitez satisfaire la couverture de test des méthodes privées dans JUnit
Je veux obtenir la valeur de Cell de manière transparente quel que soit CellType (Apache POI)
Vous pouvez ne pas vouloir utiliser la méthode remove sur ArrayList très souvent
Je veux utiliser java8 forEach avec index
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier
Sortie de la façon d'utiliser la méthode slice
[Eclipse] Je veux utiliser la fonction de complétion, mais je veux réussir à confirmer la complétion avec un espace
Je veux tronquer après la virgule décimale
Utilisez-vous l'instruction for après tout? Utilisez-vous l'instruction while? Utilisation correcte des instructions for et while
Je veux voir le contenu de Request sans dire quatre ou cinq
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Je veux obtenir la valeur en Ruby
Je veux que vous racontiez que l'erreur a été résolue lorsque vous avez poignardé le chargeur dans le coin de la tête