Chalenge : Enregistrer des données key-value persistantes

Temps: 1h.
Difficulté: **

Pre-requis : ABC d'Android, Kotlin

Ce challenge propose de sauvegarder la préférence auditive de l'utilisateur (avec ou sans son), et d'enregister le nombre d'ouverture de l'application, avec Kotlin, et les Shared preferences.

.

Voici, les étapes d'implémentation :
> Ajouter un écran de paramètres
> Lire le fichier shared preferences de défaut
> Écrire dans le fichier shared preferences de défaut

> Ajouter un écran de paramètres

Pour commencer, créez un nouveau projet Android ou ouvrez en un existant.

  1. Ajoutez le dossier xml en cliquant droit sur le dossier res, ensuite faite New > Android Resource Directory. Choisissez xml pour Resource type.
  2. Ajouter un fichier XML, fragment_settings.xml, dans le dossier res/xml.
  3.       
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    
     </PreferenceScreen>
          
        
  4. Ajoutez un bouton à bascule,il représente le paramètre audio :
  5. 
      <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"&g
        <SwitchPreference
          android:defaultValue="true"
          android:key="@string/pref_sound"
          android:title="@string/label_sound" />
      </PreferenceScreen>
    
    
    avec :
    
      <string name="pref_sound" translatable="false">SOUND</string>
      <string name="label_sound">Sound:</string>
    
    
  6. Importer la bibliothèque de support de préférence dans Gradle Script du module app/ :
  7. 
      implementation "androidx.preference:preference-ktx:1.1.1"
    
    
  8. Ajoutez une nouvelle classe Kotlin, SettingsFragment, elle hérite de PreferenceFragmentCompat:
  9. 
      class SettingsFragment : PreferenceFragmentCompat() {
          override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
    
          }
      }
    
    
  10. Chargez le fichier de vue dans la méthode onCreatePreferences() :
  11. 
      addPreferencesFromResource(R.xml.fragment_settings)
    
    
  12. Chargez la valeur entrée par défaut false :
  13. 
      PreferenceManager.setDefaultValues(this, R.xml.fragment_settings, false)
    
    

Note : Une alternative est d'utiliser le modèle de projet Settings Activity avec Android Studio.

> Lire le fichier shared preferences de défaut

Le but est de lire la valeur précédemment enregistrée avec la clé pref_sound.

  1. Depuis l'Activity principale, récupérez le fichier de défaut :
  2. 
    val defaultSharedPref = PreferenceManager.getDefaultSharedPreferences(this)
    
    
  3. Lire la valeur enregistrée :
  4. 
    val isSound = defaultSharedPref.getBoolean(getString(R.string.pref_sound), true)
    
    

À présent, isSound contient la préférence auditive de l'utilisateur.

> Écrire dans le fichier shared preferences de défaut

SharedPreferences peut être ouvert en écriture ou en lecture.
L'objectif est d'enregistrer le nombre d'ouverture de l'application.

  1. Récupérer l'éditeur :
  2. 
    val editor: SharedPreferences.Editor = defaultSharedPref.edit()
    
    
  3. Depuis l'Activity principale, dans la méthode onCreate(), incrémenter la valeur liée à la clé NB_OPENED :
  4. 
    var nb = defaultSharedPref.getInt(PREF_NB_OPENED, 0) + 1
    editor.putInt(PREF_NB_OPENED, nb)
    
    
    avec :
    
    companion object { const val PREF_NB_OPENED = "NB_OPENED" }
    
    
  5. Valider les changements :
  6. 
      editor.apply()
    
    

Enfin, ce challenge nous donne l'opportunité de traiter les SharedPreferences du côté UI comme du côté fichier.

</> Solution du challenge

Obtenez les codes sources dans les Ressources supplémentaires de ce thème sur les Paramètres Utilisateur.