Hinweis: Ich bin mitten in meinem Ehrgeiz erschöpft
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!
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.
--Schreiben Sie einen vorhandenen Schlüssel, von dem Sie nicht einmal wissen, wo er sich versehentlich befindet
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.
Als Titel des Artikels. Ich möchte, dass Sie "Enum.name ()" verwenden.
Alle Schlüssel sind in derselben Aufzählungsklasse definiert. Sie sehen auf einen Blick, welcher Schlüssel definiert ist.
Wenn der Definitionsname abgedeckt ist, wird er zunächst nicht kompiliert, sodass Sie sicher sein können.
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.
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);
Standardwert ist Objekt "Ich weiß genau, welcher Typ diesem Schlüssel entspricht." "Zögern Sie nicht über den Standardwert zum Zeitpunkt des Erwerbs" In Anbetracht des Verdienstes denke ich, dass die Richtung zum Festlegen des Standardwerts für den Schlüssel nicht falsch ist. Es ist unverzeihlich, dass der Anrufer eine Besetzung benötigt. null kann nicht der Standardwert sein. Sie können den Rückgabewert festlegen, indem Sie SharedPreferences nach Wertetypen gruppieren. Wenn möglich, möchte ich jedoch Schlüssel mit enum als Gruppe von Bedeutungen gruppieren. Ich habe es mit Kotlin versucht, aber es hat nur Object in Any geändert. Gibt es eine Möglichkeit, wenn ich kompetent bin?
Trotzdem werde ich den Schlüssel direkt in String setzen! Es ist möglicherweise besser, eine Wrapper-Klasse zu erstellen, die nur die definierte Aufzählung als Argument verwendet.
Ich möchte den Preis von einem bestehenden Projekt übernehmen Ich habe keine andere Wahl, als mein Bestes zu geben
Ich würde mich freuen, wenn jemand etwas besseres machen könnte!
Recommended Posts