[JAVA] Création d'une bibliothèque qui facilite la gestion des préférences partagées Android

J'ai secrètement créé une bibliothèque qui facilite la gestion des préférences partagées d'Android, je vais donc profiter du calendrier de l'Avent et le présenter.

Preferhythm

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

What's this?

Lors du développement d'une application Android, vous pouvez enregistrer les valeurs sur votre appareil, mais dans ce cas, vous utilisez généralement les préférences partagées. Cependant, je pensais personnellement que ce serait difficile à utiliser ou que ce serait un foyer d'erreurs humaines telles que des fautes de frappe, j'ai donc créé une bibliothèque de wrapper pour les préférences partagées avec l'esprit que je devrais le faire. Je pense qu'il y a beaucoup de gens qui écrivent du code standard comme ↓, donc je le simplifie en utilisant la génération automatique de code par Annotation Processor.

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()
    }

}

Si vous utilisez cette bibliothèque, le code ci-dessus sera ↓.

@PrefClass
class MyPreferences {

    @PrefField
    val token: String?
}

En faisant cela, lorsque la valeur à enregistrer augmente, elle peut être libérée d'un "syndrome que j'ai copié et collé mais je m'inquiète de l'omission de modifications"

Requirement

--Android 4.0.3 (API 15) ou supérieur

Install

Ajoutez ce qui suit à gradle.build du module à utiliser. Pour Kotlin, n'oubliez pas ʻapply plugin: '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'
}

Cliquez ici pour la dernière version → [Télécharger](https://bintray.com/kazakago/maven/preferhythm/ _dernière version)

Usage

Ajoutez l'annotation @ PrefClass à la classe que vous souhaitez modéliser dans les Préférences, Attachez l'annotation @ PrefField à la variable de champ que vous souhaitez enregistrer et la configuration du modèle est terminée.

@PrefClass //Dans la classe de modèle pour SharedPreferences@Veuillez joindre PrefClass
class MyPreferences {

    @PrefField //Pour chaque valeur que vous souhaitez enregistrer@Veuillez joindre PrefField
    int intValue = 3; //La valeur par défaut en l'absence de valeur est 3

    @PrefField
    boolean booleanValue; //La valeur par défaut en l'absence de valeur est false, ce qui correspond à la valeur par défaut du type booléen.

    @PrefField
    String stringValue; //La valeur par défaut en l'absence de valeur est null

    @NonNull
    @PrefField
    String nonNullStringValue = "foo"; //La valeur par défaut lorsqu'il n'y a pas de valeur"foo".. Aussi@Il est également possible de le refléter dans la méthode générée en ajoutant l'annotation NonNull.

}

Si vous construisez dans l'état ci-dessus, une classe nommée "Nom de classe de modèle avec @ PrefClass + Manager" sera automatiquement générée. Un getter setter est automatiquement implémenté pour chaque champ avec @ PrefField, donc si vous le définissez dans cette méthode et apply (), il sera sauvegardé. seulement ça!

public class MainActivity extends Activity {

    // `MyPreferencesManager`Est généré automatiquement
    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 (Valeur par défaut)

        myPreferencesManager.setIntValue(100); //Ensemble 100
        myPreferencesManager.commit(); //Pour refléter les modifications, appelez commit ou appliquez comme dans les préférences partagées.

        System.out.print(myPreferencesManager.getIntValue()); //Ce sera 100 set
        
        myPreferencesManager.clear(); //Effacer les valeurs contenues dans MyPreferencesManager
        myPreferencesManager.commit();

        System.out.print(myPreferencesManager.getIntValue()); // 3 (Sera à nouveau la valeur par défaut)
    }

}

Fonctionne avec Java et Kotlin dans le référentiel Veuillez voir cela car il contient un exemple à faire

Important

Nom des préférences

Par défaut, le nom des préférences partagées reflète le nom de la classe Si cela ne vous convient pas, vous pouvez le modifier librement en modifiant les paramètres d'annotation.

@PrefClass("YOUR_ORIGINAL_PREFERENCES_NAME")
class YourPreferencesClass {

...

}

Nom de la clé

De même, le nom de la clé lors de l'enregistrement dans les préférences partagées reflète également le nom de la variable de champ par défaut. Cela peut également être modifié en insérant une chaîne de caractères arbitraire dans le paramètre d'annotation.

@PrefClass
class YourPreferencesClass {

    @PrefField("YOUR_ORIGINAL_KEY_NAME")
    int yourSaveValue;

}

Utilisez cette option si vous souhaitez reprendre la Préférence ou la clé partagée déjà implémentée.

Advanced

Getter, remplacement de méthode Setter

Puisque le "nom de classe de modèle avec la classe @ PrefClass + Manager" généré automatiquement peut être hérité, il est possible d'interrompre le traitement arbitraire en remplaçant la méthode.

public class CustomMyPreferencesManager extends MyPreferencesManager {

    public CustomMyPreferencesManager(@NonNull Context context) {
        super(context);
    }
    
    @Nullable
    @Override
    public String getStringValue() {
        //Veuillez faire quelque chose si nécessaire
        // ex)Décryptage
        return super.getStringValue();
    }

    @NonNull
    @Override
    public MyPreferencesManager setStringValue(@Nullable String value) {
        //Veuillez faire quelque chose si nécessaire
        // ex)Chiffrement
        return super.setStringValue(value);
    }

}

Kotlin Support

Cette bibliothèque est également supposée être utilisée à partir de Kotlin, et du code qui considère la syntaxe Nullable et NonNull est généré.

@PrefClass
class MyPreferences {

    @PrefField
    val intValue: Int = 3 //NonNull et la valeur par défaut est 3

    @PrefField
    val booleanValue: Boolean = false //NonNull et la valeur par défaut est false

    @PrefField
    val stringValue: String = "foo" //NonNull et la valeur par défaut est`foo`

    @PrefField
    val nullableStringValue: String? = null //Nullable et la valeur par défaut est null

    @PrefField
    val nullableStringWithInitValue: String? = "bar" //Nullable et la valeur par défaut est"bar"

}

Supported Type

Les types pris en charge par cette bibliothèque sont les suivants Puisqu'il s'agit d'une bibliothèque d'encapsuleurs pour SharedPreferences, les types pris en charge sont les mêmes. Voir Documentation officielle pour plus d'informations.

License

Distribué sous licence MIT

Recommended Posts

Création d'une bibliothèque qui facilite la gestion des préférences partagées Android
LazyBLE Wrapper (a créé une bibliothèque qui rend Android BLE super simple) v0.14
Création d'une bibliothèque de routage multifonctionnelle pour Android qui prend également en charge l'élément partagé --MoriRouter
Une solution qui facilite la saisie des avantages et des tests Web pour vérifier les résultats
J'ai créé une action GitHub qui facilite la compréhension du résultat de l'exécution de RSpec
Considérez RxJava comme une bibliothèque qui facilite l'écriture du traitement asynchrone
Un mémo sobrement accro à la demande de multipart / form-data
Création d'une bibliothèque qui facilite la gestion des préférences partagées Android
C'était étonnamment facile. Comment mettre à jour les informations utilisateur sans entrer de mot de passe
Une histoire qui a rendu aussi facile que possible la vérification de l'opération lors de la création automatique d'une mise à jour de bibliothèque PR avec Github Dependabot
Une histoire qui a rendu pratique avec Kotlin qu'il est difficile d'exécuter une animation en continu sur Android
Bibliothèque de traitement facile à créer
Comment identifier le chemin sur lequel il est facile de se tromper
Écrivons un code facile à maintenir (Partie 2) Nom