[JAVA] Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden

Hinweis: Ich bin mitten in meinem Ehrgeiz erschöpft

SharedPreference ist gut!

Die standardmäßige API Shared Preference ist nett! Es hängt von der Größe der App ab, aber es ist sehr zuverlässig, wenn es wie "DB und es ist chaotisch !!!!!!" ist. Da der primitive Typ unterdrückt wird, können kleine Flags gespeichert werden. Selbst wenn ich die App aktualisiere, ist es Mist. Da es in XML gespeichert ist, können Sie den Inhalt leicht sehen. Du hast es geschafft!

Schwere Realität

Hier ist eine App, die Einstellungen in Shared Preference verwaltet. Die Anzahl der Schlüssel beträgt über 100. Schlüssel sind überall verstreut, z. B. in einer konstanten Klasse geschrieben, in Aktivität konstant gemacht oder direkt geschrieben.

sharedPreference.getAll.toString()

Wenn Sie es schaffen, in die freigegebenen Einstellungen zu schauen, werden Sie sie schließen. Von nun an müssen Sie jeden Schlüssel greifen, abholen und die Bedeutung der Schlüssel und Werte entschlüsseln. Es ist schwer.

Liste der harten Realitäten, die ich gesehen habe

--Schreiben Sie einen vorhandenen Schlüssel, von dem Sie nicht einmal wissen, wo er sich versehentlich befindet

Ursache

Ich denke, die meisten Probleme, die durch SharedPreference verursacht werden, sind auf die Schlüsselverwaltung zurückzuführen. Selbst wenn Sie sie als konstante Klasse zusammenstellen und mehrere Personen sie bearbeiten, können Sie versehentlich denselben Schlüssel wie den vorhandenen definieren. Es ist schmerzhaft, zu den Orten gehen zu müssen, an denen ich den Wertetyp für diesen Schlüssel überprüfe.

damit

Als Titel des Artikels. Ich möchte, dass Sie "Enum.name ()" verwenden.

Nicht verstreut

Alle Schlüssel sind in derselben Aufzählungsklasse definiert. Sie sehen auf einen Blick, welcher Schlüssel definiert ist.

Schlüssel werden niemals dupliziert

Wenn der Definitionsname abgedeckt ist, wird er zunächst nicht kompiliert, sodass Sie sicher sein können.

Sicher, Schlüssel separat zu verwalten

Wenn Sie für jede Schlüsselgruppe eine Aufzählungsklasse erstellen, werden die Schlüssel nicht gemischt und durcheinander gebracht.

Übrigens ist es "Enum.name ()" anstelle von "Enum.toString ()", weil es nicht "@ Override" sein kann. Es ist durchaus möglich, dass jemand ArtString überschreibt und erklärt, was drin ist.

Versuchte es zu schaffen

Ich persönlich wünschte, ich könnte das tun! Die Aufzählung für Shared Preference lautet wie folgt.

FoodPref.java


import android.content.Context;
import android.content.SharedPreferences;

enum FoodPref {
    //Tintenfisch
    TAKO(100),
    //Katze
    NEKO(200),
    //Dort
    SOKO(300);

    //Standardwert.
    public final Object DEF;

    FoodPref(Object def) {
        this.DEF = def;
    }

    //Gemeinsame Präferenz nur für diese Aufzählung
    public static SharedPreferences getThisPreference(final Context context) {
        return context.getSharedPreferences(FoodPref.class.getSimpleName(), Context.MODE_PRIVATE);
    }
}

Wie benutzt man


        //Erstellen
        SharedPreferences foodSp = FoodPref.getThisPreference(context);
        //Herausgeben
        int cat = foodSp.getInt(FoodPref.NEKO.name(), (Integer) FoodPref.NEKO.DEF);
        //Einstellen
        foodSp.edit().putInt(FoodPref.SOKO.name(), 666).apply();


        //Auch wenn es auf verschiedene Weise zunimmt
        SharedPreferences toySp = ToyPref.getThisPreference(context);
        //Weil es separat gespeichert wird
        SharedPreferences carSp = CarPref.getThisPreference(context);
        //Es besteht keine Gefahr des Vermischens von Werten
        SharedPreferences bookSp = BookPref.getThisPreference(context);

Verbleibende Herausforderungen

Fazit

Ich würde mich freuen, wenn jemand etwas besseres machen könnte!

Recommended Posts

Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Eclipse Ich möchte auf jeden Fall, dass Sie die von Transcendental empfohlene Tastenkombination (Windows) verwenden.
Ich möchte den Inhalt der Absicht var_dump
Wenn Sie die Methode außerhalb verwenden möchten
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Ich möchte die Antwort der Janken-App wissen
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Für diejenigen, die MySQL für die Datenbank in der Umgebungskonstruktion von Rails6 ~ verwenden möchten.
[Anfänger] Ich möchte die Migrationsdatei ändern.
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte eine andere Desinfektionsmethode als Ansicht verwenden.
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte mehrere Rückgabewerte für das eingegebene Argument zurückgeben
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte @Autowired in Servlet verwenden
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
Glassfish Tuning List, die ich vorerst behalten möchte
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
Ich habe versucht, die wichtigsten Punkte des gRPC-Designs und der Entwicklung zusammenzufassen
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
Ich möchte den Wert von Cell unabhängig vom CellType (Apache POI) transparent erhalten.
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden
Ausgabe der Verwendung der Slice-Methode
[Eclipse] Ich möchte die Abschlussfunktion verwenden, aber ich möchte es schaffen, den Abschluss mit einem Leerzeichen zu bestätigen
Ich möchte nach dem Dezimalpunkt abschneiden
Verwenden Sie doch die for-Anweisung? Verwenden Sie die while-Anweisung? Ordnungsgemäße Verwendung von for-Anweisung und while-Anweisung
Ich möchte den Inhalt der Anfrage sehen, ohne vier oder fünf zu sagen
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Ich möchte den Wert in Ruby erhalten
Ich möchte, dass Sie die Geschichte erzählen, dass der Fehler behoben wurde, als Sie das Ladegerät in die Ecke Ihres Kopfes gestochen haben