[JAVA] Erstellt eine Bibliothek, die die Handhabung von freigegebenen Android-Einstellungen erleichtert

Ich habe heimlich eine Bibliothek erstellt, die es einfach macht, mit den gemeinsamen Einstellungen von Android umzugehen, daher werde ich den Adventskalender nutzen und ihn vorstellen.

Preferhythm

https://github.com/KazaKago/Preferhythm DownloadBuildStatuslicense

What's this?

Bei der Entwicklung einer Android-App können Sie die Werte auf Ihrem Gerät speichern. In diesem Fall verwenden Sie jedoch normalerweise die freigegebenen Einstellungen. Ich persönlich dachte jedoch, dass es schwierig sein würde, es zu verwenden, oder dass es eine Brutstätte für menschliche Fehler wie Tippfehler sein würde, und so erstellte ich eine Wrapper-Bibliothek für gemeinsame Einstellungen mit dem Geist, den ich machen sollte. Ich denke, dass viele Leute Standardcode wie ↓ schreiben, deshalb verwende ich die automatische Codegenerierung durch Annotation Processor, um ihn zu vereinfachen.

class MyPreferences(context: Context) {

    private val preferences = context.getSharedPreferences("MyPref", Context.MODE_PRIVATE)
    private val tokenKey = "session_token"

    fun getToken(): String? {
        return preferences.getString(tokenKey, null))
    }

    fun setToken(value: String?) {
        val editor = preferences.edit()
        editor.putString(tokenKey, value)
        editor.apply()
    }

}

Wenn Sie diese Bibliothek verwenden, lautet der obige Code ↓.

@PrefClass
class MyPreferences {

    @PrefField
    val token: String?
}

Wenn sich der zu speichernde Wert erhöht, wird er möglicherweise von "einem Syndrom befreit, das ich kopiert und eingefügt habe, aber ich mache mir Sorgen, dass Änderungen weggelassen werden".

Requirement

Install

Fügen Sie gradle.build des zu verwendenden Moduls Folgendes hinzu. Vergessen Sie für Kotlin nicht, das Plugin anzuwenden: kotlin-kapt.

Java

dependencies {
    implementation 'com.kazakago.preferhythm:preferhythm:x.x.x'
    annotationProcessor 'com.kazakago.preferhythm:preferhythm-processor:x.x.x'
}

Kotlin

apply plugin: 'kotlin-kapt'

dependencies {
    implementation 'com.kazakago.preferhythm:preferhythm:x.x.x'
    kapt 'com.kazakago.preferhythm:preferhythm-processor:x.x.x'
}

Klicken Sie hier für die neueste Version → [Download](https://bintray.com/kazakago/maven/preferhythm/ _letzte Version)

Usage

Fügen Sie die Annotation @ PrefClass zu der Klasse hinzu, die Sie in den Einstellungen modellieren möchten. Fügen Sie der Feldvariablen, die Sie speichern möchten, die Annotation @ PrefField hinzu, und die Modelleinstellung ist abgeschlossen.

@PrefClass //In der Modellklasse für SharedPreferences@Bitte PrefClass beifügen
class MyPreferences {

    @PrefField //Für jeden Wert, den Sie speichern möchten@Bitte PrefField beifügen
    int intValue = 3; //Der Standardwert, wenn kein Wert vorhanden ist, ist 3

    @PrefField
    boolean booleanValue; //Der Standardwert, wenn kein Wert vorhanden ist, ist false. Dies entspricht dem Standardwert des booleschen Typs.

    @PrefField
    String stringValue; //Der Standardwert, wenn kein Wert vorhanden ist, ist null

    @NonNull
    @PrefField
    String nonNullStringValue = "foo"; //Der Standardwert, wenn kein Wert vorhanden ist"foo".. Ebenfalls@Es ist auch möglich, dies in der Methode widerzuspiegeln, die durch Hinzufügen der Annotation NonNull generiert wird.

}

Wenn Sie im obigen Status erstellen, wird automatisch eine Klasse mit dem Namen "Modellklassenname mit" @ PrefClass "+ Manager" generiert. Für jedes Feld mit "@ PrefField" wird automatisch ein Setter-Getter implementiert. Wenn Sie ihn also in dieser Methode festlegen und apply () anwenden, wird er gespeichert. nur das!

public class MainActivity extends Activity {

    // `MyPreferencesManager`Wird automatisch generiert
    private MyPreferencesManager myPreferencesManager = new MyPreferencesManager(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        System.out.print(myPreferencesManager.getIntValue()); // 3 (Standardwert)

        myPreferencesManager.setIntValue(100); //Setze 100
        myPreferencesManager.commit(); //Rufen Sie Commit an oder bewerben Sie sich wie in den freigegebenen Einstellungen, um Ihre Änderungen widerzuspiegeln.

        System.out.print(myPreferencesManager.getIntValue()); //Es wird 100 gesetzt
        
        myPreferencesManager.clear(); //Löschen Sie die in MyPreferencesManager enthaltenen Werte
        myPreferencesManager.commit();

        System.out.print(myPreferencesManager.getIntValue()); // 3 (Wird wieder der Standardwert sein)
    }

}

Funktioniert mit Java und Kotlin im Repository Bitte beachten Sie dies, da es ein zu erledigendes Beispiel enthält

Important

Name der Einstellungen

Standardmäßig spiegelt der Name der freigegebenen Einstellungen den Klassennamen wider Wenn dies unpraktisch ist, können Sie es frei ändern, indem Sie die Anmerkungsparameter anpassen.

@PrefClass("YOUR_ORIGINAL_PREFERENCES_NAME")
class YourPreferencesClass {

...

}

Schlüsselname

In ähnlicher Weise spiegelt der Schlüsselname beim Speichern in freigegebenen Einstellungen standardmäßig auch den Feldvariablennamen wider. Dies kann auch durch Einfügen einer beliebigen Zeichenfolge in den Anmerkungsparameter geändert werden.

@PrefClass
class YourPreferencesClass {

    @PrefField("YOUR_ORIGINAL_KEY_NAME")
    int yourSaveValue;

}

Verwenden Sie diese Option, wenn Sie die bereits implementierte Shared Preferecne oder den Schlüssel übernehmen möchten.

Advanced

Getter, Setter-Methode überschreiben

Da die automatisch generierte Klasse "Modellklassenname mit @ PrefClass + Manager" vererbt werden kann, ist es möglich, die willkürliche Verarbeitung durch Überschreiben der Methode zu unterbrechen.

public class CustomMyPreferencesManager extends MyPreferencesManager {

    public CustomMyPreferencesManager(@NonNull Context context) {
        super(context);
    }
    
    @Nullable
    @Override
    public String getStringValue() {
        //Bitte tun Sie bei Bedarf etwas
        // ex)Entschlüsselung
        return super.getStringValue();
    }

    @NonNull
    @Override
    public MyPreferencesManager setStringValue(@Nullable String value) {
        //Bitte tun Sie bei Bedarf etwas
        // ex)Verschlüsselung
        return super.setStringValue(value);
    }

}

Kotlin Support

Es wird auch davon ausgegangen, dass diese Bibliothek von Kotlin verwendet wird, und es wird Code generiert, der die Syntax Nullable und NonNull berücksichtigt.

@PrefClass
class MyPreferences {

    @PrefField
    val intValue: Int = 3 //NonNull und Standardwert ist 3

    @PrefField
    val booleanValue: Boolean = false //NonNull und Standardwert ist false

    @PrefField
    val stringValue: String = "foo" //NonNull und der Standardwert ist`foo`

    @PrefField
    val nullableStringValue: String? = null //Nullable und Standardwert ist null

    @PrefField
    val nullableStringWithInitValue: String? = "bar" //Nullable und der Standardwert ist"bar"

}

Supported Type

Folgende Typen werden von dieser Bibliothek unterstützt Da es sich um eine Wrapper-Bibliothek für SharedPreferences handelt, sind die unterstützten Typen identisch. Weitere Informationen finden Sie unter Offizielle Dokumentation.

License

Unter MIT-Lizenz vertrieben

Recommended Posts

Erstellt eine Bibliothek, die die Handhabung von freigegebenen Android-Einstellungen erleichtert
LazyBLE Wrapper (hat eine Bibliothek erstellt, die Android BLE sehr einfach macht) v0.14
Erstellt eine multifunktionale Routing-Bibliothek für Android, die auch Shared Element - MoriRouter unterstützt
Eine Lösung, die es einfach macht, Vor- und Nachteile sowie Webtests einzugeben, um die Ergebnisse zu überprüfen
Ich habe eine GitHub-Aktion erstellt, die es einfach macht, das Ausführungsergebnis von RSpec zu verstehen
Stellen Sie sich RxJava als eine Bibliothek vor, die das Schreiben von asynchroner Verarbeitung erleichtert
Ein Memo, das nüchtern von der Anfrage nach mehrteiligen / Formulardaten abhängig war
Erstellt eine Bibliothek, die die Handhabung von freigegebenen Android-Einstellungen erleichtert
Es war überraschend einfach. So aktualisieren Sie Benutzerinformationen, ohne ein Kennwort einzugeben
Eine Geschichte, die es so einfach wie möglich machte, den Vorgang beim automatischen Erstellen eines PR für Bibliotheksaktualisierungen mit Github Dependabot zu überprüfen
Eine Geschichte, die es Kotlin bequem machte, dass es mühsam ist, Animationen kontinuierlich auf Android auszuführen
Einfach zu erstellende Verarbeitungsbibliothek
So identifizieren Sie den Pfad, auf dem leicht Fehler gemacht werden können
Schreiben wir einen Code, der einfach zu pflegen ist (Teil 2)