Le stockage de données Android permet de persister les données des applications

Le stockage de données Android permet de persister les données des applications via le système de fichiers. Android fournit plusieurs méthodes pour sauvegarder des informations. En plus des bases de données, il existe deux solutions qui permettent d'enregistrer des données, les préférences partagées et les fichiers :  Les préférences partagées : permettent d'associer une valeur à un identifiant (clé-valeur). Le couple ainsi créé permet de retenir les différentes options que l'utilisateur veut conserver ou l'état de l'interface graphique. Ces valeurs pourront être partagées entre plusieurs composants.  Les fichiers : permettent de stocker les données sur le terminal ou sur un périphérique externe.  Base de données SQLite : des instances de bases de données SQLite sont stockées sur le système de fichiers local. Les fichiers sont enregistrés dans le dossier files et les paramètres de l'application sont enregistrés sous forme de fichiers XML dans le dossier shared_prefs. 1) Préférences partagées Les préférences partagées, SharedPreferences permettent de stocker et récupérer les données sous forme de paires clé-valeur (préférences) de types primitifs dans le système de fichiers Android. La définition de ces préférences peut se faire par une ressource XML. Pour accéder aux préférences stockées on utilise des méthodes de la classe PreferenceManager. Les données partagées Le point de départ de la manipulation des préférences partagées est la classe SharedPreferences. Elle possède des méthodes permettant d'enregistrer et récupérer des paires de type clé-valeur. L'avantage est que ces données restent conservées même si l'application est arrêtée. Il y a trois méthodes de la classe SharedPreferences :  PreferenceManager.getDefaultSharedPreferences(Context context),c'est la méthode statique la plus simple.  getSharedPreferences (String name, int mode) où name est le nom du fichier créé.  getPreferences(int mode) pour utiliser un fichier standard par activité. Le paramètre mode peut prendre trois valeurs :  Context.MODE_PRIVATE : le fichier créé n'est accessible que par l'application qui l'a créé.  Context.MODE_WORLD_READABLE : le fichier créé peut être lu par n'importe quelle application.  Context.MODE_WORLD_WRITEABLE : le fichier créé peut être lu et modifié par n'importe quelle application. 1 Remarque - Appeler getDefaultSharedPreferences(Context context) revient à appeler getPreferences(MODE_PRIVATE) - Utiliser getPreferences(int mode) revient à utiliser getSharedPreferences (NOM_PAR_DEFAUT, mode) avec NOM_PAR_DEFAUT un nom généré en fonction du package de l'application. Ces méthodes retournent une instance de SharedPreference() pointant sur le fichier qui contient les valeurs de préférences. Pour enregistrer des données (des couples clé-valeur) dans un SharedPreferences, il faut utiliser un objet de la classe SharedPreference.Editor, en utilisant la méthode edit(). Pour ajouter des informations on utilise : putXXX(String key, X value) avec XXX le type de l'objet, key la clé et value la valeur associée. Il faut ensuite valider les changements avec la méthode boolean commit() ou apply(). SharedPreferences sh=getSharedPreferences("mypreference", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sh.edit(); editor.putString("age", 50); editor.commit(); SharedPreferences pr = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = pr.edit(); editor.putString("Name","ali"); editor.apply(); Les préférences partagées ne fonctionnent qu'avec les objets de types primitifs : boolean, float, int, long et String. Pour récupérer les données on utilise getX(String key) SharedPreferences prefs = getSharedPreferences("mypreference", MODE_PRIVATE); String name = prefs.getString("Name", "nom par defaut");//" nom par defaut "est la valeur par défaut. //int idName = prefs.getInt("idName", 0); //0 est la valeur par defaut. } SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this); String name = pref.getString("Name", ""); Exemple Pour conserver la couleur préférée de l'utilisateur, il n'est pas possible d'utiliser la classe Color puisque seuls les types de base sont acceptés, alors on pourrait conserver la valeur de la couleur sous la forme d'une chaîne de caractères : public final static String FAVORITE_COLOR = "fav_color"; … 2 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putString(FAVORITE_COLOR, "FFABB4"); editor.commit(); // On veut la chaîne de caractères d'identifiant FAVORITE_COLOR // Si on ne trouve pas cette valeur, "FFFFFF" est retournée String couleur = preferences.getString(FAVORITE_COLOR, "FFFFFF"); public void onClick(View v) { String nom = ed1.getText().toString(); String ph = ed2.getText().toString(); String e = ed3.getText().toString(); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Name, nom); editor.putString(Phone, ph); editor.putString(Email, e); editor.commit(); Toast.makeText(MainActivity.this,"Thanks",Toast.LENGTH_LONG).show(); } } D'autres méthodes de SharedPreferences.Editor : removeString(String key), clear(), Map<String, ?> getAll(). https://www.tutlane.com/tutorial/android/android-shared-preferences-with-examples Des préférences prêtes à l'emploi Pour enregistrer les préférences, on propose une activité qui permet d'insérer différents paramètres. Ce type d'activités s'appelle "PreferenceActivity". Chaque couple clé/valeur est créé automatiquement et sera récupéré automatiquement. La création se fait en plusieurs étapes : Étape 1 : créer un fichier XML La racine de ce fichier doit être un PreferenceScreen. On le définit souvent dans res/xml/preference.xml. Il est possible de désigner des catégories de préférences. On peut ajouter des préférences avec le nœud PreferenceCategory. Ce nœud est un layout, il peut donc contenir d'autre vues. Il ne peut prendre qu'un seul attribut, android:title, pour préciser le texte qu'il affichera. 3 Exemple <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen > <PreferenceCategory android:title="Réseau"> </PreferenceCategory> <PreferenceCategory android:title="Luminosité"> </PreferenceCategory> <PreferenceCategory android:title="Couleurs"> </PreferenceCategory> </PreferenceScreen> Après les catégories, il faut insérer des préférences :  android:key : l'identifiant de la préférence partagée. C'est un attribut indispensable, ne l'oubliez jamais.  android:title : titre principal de la préférence.  android:summary : description de cette préférence.  android:dependency : lie une préférence à une autre activité. Il faut y insérer l'identifiant android:key de la préférence dont on dépend.  android:defaultValue : la valeur par défaut de cette préférence. Il y a trois types de préférences : sous forme de case à cocher, d'un editText ou d'une liste, 1. case à cocher La première conçue par une case à cocher avec CheckBoxPreference. À la place du résumé standard, on peut déclarer un résumé qui ne s'affiche que lorsque la case est cochée, android:summaryOn, ou uniquement quand la case est décochée, android:summaryOff. <CheckBoxPreference android:key="checkBoxPref" android:title="Titre" android:summaryOn="Résumé quand sélectionné" android:summaryOff="Résumé quand pas sélectionné" android:defaultValue="true"/> 2. EditTextPreference Le deuxième type de préférences consiste à permettre à l'utilisateur d'insérer du texte avec EditTextPreference avec un EditText Attributs : android:dialogTitle : permet de définir le texte de la boîte de dialogue, 4 android:negativeButtonText et android:positiveButtonText permettent respectivement de définir le texte du bouton à droite et celui du bouton à gauche dans la boîte de dialogue. Exemple <EditTextPreference android:key="editTextPref" android:dialogTitle="Titre de la boîte" android:positiveButtonText="Je valide !" android:negativeButtonText="Je valide pas !" android:title="Titre" android:summary="Résumé" android:dependency="checkBoxPref" /> 3. ListPreference Le troisième type de préférences est un choix dans une liste d'options avec ListPreference. Dans cette préférence, on différencie ce qui est affiché de ce qui est réel. Elle est pratique pour traduire son application en plusieurs langues. Attributs  android:dialogTitle, android:negativeButtonText et android:positiveButtonText.  android:entries : présente les données de la liste que lira l'utilisateur  android:entryValues : présente les données qui seront enregistrées. La manière la plus facile pour remplir ces attributs se fait par une ressource de type array, Exemple <resources> <array name="liste_couleurs_fr"> <item>Bleu</item> <item>Rouge</item> <item>Vert</item> </array> <array name="liste_couleurs"> <item>blue</item> <item>red</item> <item>green</item> </array> </resources> Pour utiliser cette liste <ListPreference android:key="listPref" android:dialogTitle="Choisissez une couleur" android:entries="@array/liste_couleurs_fr" android:entryValues="@array/liste_couleurs" android:title="Choisir couleur" /> 5 Étape 2 : dans le Manifest Pour recevoir cette nouvelle interface graphique, nous avons besoin d'une activité. Il nous faut donc la déclarer dans le Manifest pour pouvoir y accéder avec les intents. <activity android:name=".PreferenceActivityExample" android:label="@string/title_activity_preference_activity_example" > </activity> Étape 3 : en Java Cette activité sera en fait de type PreferenceActivity. On peut la traiter comme une activité classique, mais au lieu de setContentView, on utilise addPreferencesFromResource : void addPreferencesFromResource(int preferencesResId) Exemple public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preference); } Lancer cette activité par un intent dans l'activité principale. protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startActivity(new Intent(this, PrefeActivity.class)); } Pour lire les valeurs des préférences à n'importe où dans l'application, on utilise getX(cle, valeur par defaut). SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(this); String strUserName = SP.getString("username", "NA"); boolean bAppUpdates =SP.getBoolean("checkBoxPref",false); String downloadType =SP.getString("downloadType","1"); https://www.javatpoint.com/android-preferences-example 6 2) Les fichiers Il y a deux manières d'utiliser les fichiers : soit sur la mémoire interne du périphérique, soit sur une mémoire externe (par exemple une carte SD (Secure Digital). Dans tous les cas, on part toujours du Context pour manipuler des fichiers. En mémoire interne Rappels sur l'écriture et la lecture de fichiers Le cas le plus simple est de manipuler des flux d'octets, ce qui nécessite des objets de type FileInputStream pour lire un fichier et FileOutputStream pour écrire dans un fichier. La lecture s'effectue avec la méthode int read() et on écrit dans un fichier avec void write(byte[] b). Pour récupérer un FileOutputStream, utiliser la méthode openFileOutput (String name, int mode) avec name le nom du fichier et mode le mode dans lequel ouvrir le fichier, il peut avoir :  MODE_PRIVATE : permet de créer (ou de remplacer) un fichier qui sera utilisé uniquement par l'application.  MODE_WORLD_READABLE : créer un fichier que d'autres applications pourront lire.  MODE_WORLD_WRITABLE : créer un fichier où même d'autres applications pourront lire et écrire.  MODE_APPEND : écrire à la fin d'un fichier préexistant, au lieu de créer un fichier. Exemple : écrire mon pseudo dans un fichier FileOutputStream output = null; String userName = "ali"; try { output = openFileOutput("fichier", MODE_PRIVATE); output.write(userName.getBytes()); if(output != null) output.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Pour lire dans un fichier, on peut utiliser la méthode openFileInput (String uploads/s3/ chap6-stockage-de-donnees.pdf

  • 18
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager