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
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 → [](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
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 {
...
}
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
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