Sauvegarder ses données sous Android :! SharedPreferences, SQLite, Files



Documents pareils
Stockage de données sous Android

Bases de données et fournisseurs de contenu

1. Base de données SQLite

OpenPaaS Le réseau social d'entreprise

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation Android L3 informatique

Bases de Données relationnelles et leurs systèmes de Gestion

I4 : Bases de Données

Application web de gestion de comptes en banques

CREATION WEB DYNAMIQUE

Capacité de mémoire Tablettes

Le langage SQL (première partie) c Olivier Caron

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Cours Bases de données

TP Contraintes - Triggers

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Bases de données relationnelles

Information utiles. webpage : Google+ : digiusto/

Introduction à JDBC. Accès aux bases de données en Java

UML et les Bases de Données

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Notes de cours : bases de données distribuées et repliquées

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Java DataBaseConnectivity

Cours Bases de données 2ème année IUT

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

A QUOI SERVENT LES BASES DE DONNÉES?

Structure fonctionnelle d un SGBD

Plateforme PAYZEN. Définition de Web-services

PROJET 1 : BASE DE DONNÉES REPARTIES

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Encryptions, compression et partitionnement des données

Bases de données cours 1

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

SQL Historique

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

PHP 4 PARTIE : BASE DE DONNEES

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Corrigés des premiers exercices sur les classes

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

I. MySQL : Serveur et SGBD

Tutorial sur SQL Server 2000

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Alfstore workflow framework Spécification technique

Accès aux bases de données

Les bases de données

Gestion distribuée (par sockets) de banque en Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Langage SQL : créer et interroger une base

Introduction aux Bases de Données Relationnelles Conclusion - 1

La base de données XML exist. A. Belaïd

PHP 5. La base de données MySql. A. Belaïd 1

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

Présentation du module Base de données spatio-temporelles

Introduction au Système de Gestion de Base de Données et aux Base de Données

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Corrigé des exercices sur les références

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Développement de base de données Microsoft SQL Server Durée : 5 jours Référence : DPSQL12. Contenu

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

CHAPITRE 1 ARCHITECTURE

TD/TP 1 Introduction au SDK d Android

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Stockage du fichier dans une table mysql:

Une introduction à la technologie EJB (2/3)

Les BASES de DONNEES dans WampServer

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Premiers Pas en Programmation Objet : les Classes et les Objets

Android et le Cloud Computing

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

as Architecture des Systèmes d Information

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Projet Android (LI260) Cours 2

Introduction à la sécurité Cours 8 Infrastructure de clés publiques. Catalin Dima

Définition des Webservices Ordre de paiement par . Version 1.0

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

DMP1 DSFT des Interfaces DMP des LPS Annexe : complément de spécification sur l impression des documents à remettre au patient

TD/TP PAC - Programmation n 3

Mise en œuvre des serveurs d application

Programmation d application Bases de données avec Java

Rappel sur les bases de données

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Compte Rendu d intégration d application

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TP1. Outils Java Eléments de correction

Cours 1 : Qu est-ce que la programmation?

LES NOUVEAUTES DE COST AND PROFITABILITY MANAGEMENT 8.1

Création et Gestion des tables

TP Programmation Java / JDBC / Oracle

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Tutoriel d installation de Hibernate avec Eclipse

Transcription:

Sauvegarder ses données sous Android : SharedPreferences, SQLite, Files Jean-Ferdinand Susini Maître de conférences au CNAM Sources : Wikipedia, developper.android.com Paris, 05/06/2014

Les SharedPreferences 2 Héritié des ScratchPad et autre RecordStore de J2ME, l API des SharedPreferences permet l enregistrement persistant (dans la mémoire de stockage du téléphone) de données structurées sous forme de couples clévaleurs. À utiliser pour de «petites» quantités de données. Chaque application possède un fichier dans son «HomeDir» un sous répertoire shared_prefs dans lequel est généralement sauvegardé un fichier XML. Cette zone de stockage est partagée par tous les composants applicatifs.

Les SharedPreferences 3 Ce fichier contient un élément de type <map> qui luimême contient des éléments associant à une clé (attribut name) des valeurs (attribut values). Ces éléments sont les types des valeurs. (int, boolean ). <?xml version='1.0' encoding='utf-8' standalone='yes'?> <map> <int name="apps_grid_content_rows_land" value="3" /> <string name="action_double_tap">5</string> <boolean name="workspace_manage_wallpaper" value="false" /> <int name="apps_grid_content_columns_port" value="4" />... <int name="workspace_content_grid_rows" value="8" /> <boolean name="workspace_scroll_wallpaper" value="true" /> <int name="workspace_content_grid_columns" value="8" /> <boolean name="apps_grid_remember_pos" value="true" /> </map>

Les SharedPreferences 4 La création d une telle ressource peut être faite auprès du Context Android, grâce à la méthode getsharedpreferences(). Par exemple pour une activité : SharedPreferences sp = this.getsharedpreferences(«toto"", Context.MODE_PRIVATE); Un fichier par défaut peut-être automatiquement accessible par : SharedPreferences defaut = this.getpreferences( Context.MODE_PRIVATE); Le nom par défaut est alors nom_du_package_application.xml

Les SharedPreferences 5 Pour écrire ou lire un objet de type SharedPreferences il faut utiliser un objet éditeur du type SharedPreferences.Editor : SharedPreferences.Editor ed = defaut.edit(); Les écritures sont alors gérer par de transactions : on écrit des données à l aide des méthode de l éditeur (putint(), putstring(), putboolean() ) et on synchronize les données (commit) en une seule écriture atomique : ed.commit(); Le lecture des données se fait directement sur l objet SharedPreferences (getstring() )

Les Fichiers 6 La gestion des fichiers Android définit deux emplacements pour les fichiers manipulés par une application : Les fichiers dans le répertoire de l application (le «HomeDir»). Les fichiers sont toujours accessibles par l application. Ils sont effacés lorsque l application est supprimée. Par défaut ils sont privés à l application Les fichiers sur le périphérique de stockage externe (généralement une SD-card). Les fichiers peuvent ne pas être accessibles (retrait de la carte SD). Ils ne sont pas effacés à la désinstallation de l application. Ils sont accessibles par tous.

Les Fichiers 6 La gestion des fichiers Android définit deux emplacements pour les fichiers manipulés par une application Le stockage : externe suppose l obtention d une autorisation Les fichiers de dans l utilisateur le répertoire à déclarer de l application dans le fichiers (le «HomeDir»). AndroidManifest.xml Les fichiers sont toujours : accessibles <uses-permission android:name="android.permission.write_external_storage" /> par l application. Ils sont effacés lorsque l application est supprimée. Par défaut ils sont privés à l application Les fichiers sur le périphérique de stockage externe (généralement une SD-card). Les fichiers peuvent ne pas être accessibles (retrait de la carte SD). Ils ne sont pas effacés à la désinstallation de l application. Ils sont accessibles par tous.

Les Fichiers 6 La gestion des fichiers Android définit deux emplacements pour les fichiers manipulés par une application Le stockage : externe suppose l obtention d une autorisation Les fichiers de dans l utilisateur le répertoire à déclarer de l application dans le fichiers (le «HomeDir»). AndroidManifest.xml Les fichiers sont toujours : accessibles <uses-permission android:name="android.permission.read_external_storage" /> par l application. Ils sont effacés lorsque l application est supprimée. Par défaut ils sont privés à l application Les fichiers sur le périphérique de stockage externe (généralement une SD-card). Les fichiers peuvent ne pas être accessibles (retrait de la carte SD). Ils ne sont pas effacés à la désinstallation de l application. Ils sont accessibles par tous.

Les fichiers 7 En fait, il existe deux répertoires de stockage interne : le «HomeDir» que l on accède grâce à la méthode de Context : getfilesdir() et une zone de stockage des fichiers temporaires accessible par getcachedir(). L accès aux fichiers fonctionne alors exactement comme pour les fichiers standards en Java, au moyen des flux d entrée et de sorte (java.io.inputstream, java.io.outputstream). FileOutputStream os = openfileoutput("toto", Context.MODE_PRIVATE); os.write("essai".getbytes()); os.close();

Les fichiers 8 La gestion des fichiers sur le périphérique de stockage externe nécessite d abord de vérifier que celui-ci est bien disponible : getexternalstoragestate().equals( Environment.MEDIA_MOUNTED); Ensuite on accède aux dossiers du stockage (Muqisue, Photo ) externe par la méthode getexternalstoragepublicdirectory(). L accès aux fichiers proprement dit se fait toujours à travers l API standard Java. Il est possible de créer un répertoire spécifique à une application sur le stockage externe à l aide de la méthode getexternalfilesdir().

SQLite 9 Si Android permet l utilisation des API traditionnelles Java pour lire et écrire des fichiers sur la mémoire de stockage d un smartphone, il propose également en standard un gestionnaire de base de données relationnelle : SQLite. La caractéristique de ce système est de fournir une API directement exploitable dans une application sans avoir besoin d installer une architecture client-serveur lourde. Les bases de données sont implantées sur la mémoire de stockage par de simples fichiers. SQLite implanté en C++ est accessible en Java : android.database.sqlite.sqlitedatabase

SQLite 10 La classe SQLiteDatabase permet de former les requêtes classiques sur une base de données : creation de tables (CREATE), insertion de nouvelles valeurs (INSERT), mise à jour de valeurs (UPDATE) et interrogation et sélection de valeurs(select). Pour gérer l accès à la base de données et donc l ouverture du fichier correspondant, on commence par implanter un objet android.database.sqlite. SQLiteOpenHelper. Pour cela on va créer une sousclasse de ce type : Le constructeur de cette classe devra fournir un nom de fichier implantant la DB, un référence vers un objet Context, un éventuel CursorFactory (null sinon) et un numéro de version de schéma.

SQLite 10 La classe SQLiteDatabase permet de former les requêtes classiques sur une base de données : creation de tables (CREATE), insertion de nouvelles valeurs (INSERT), mise à jour de valeurs (UPDATE) et interrogation et sélection de valeurs(select). Pour gérer l accès à la base de données et donc l ouverture du fichier correspondant, on commence par Le constructeur devra être lié verticalement avec le constructeur SQLiteOpenHelper(Context, String, CursorFactory, int) Le numéro de version du schéma permettra d invalider les DB ayant subit une évolution de leur schéma entre 2 versions de l application. implanter un objet android.database.sqlite. SQLiteOpenHelper. Pour cela on va créer une sousclasse de ce type : Le constructeur de cette classe devra fournir un nom de fichier implantant la DB, un référence vers un objet Context, un éventuel CursorFactory (null sinon) et un numéro de version de schéma.

SQLite 11 C est le développeur de l application qui instancie dans son code l objet helper. Un objet de type SQLiteDatabase sera réellement créé lorsque l on appellera la méthode getwritabledatabase() ou getreadabledatabase() sur l objet helper. L objet helper permet de gérer l accès à la base de donné et en quelque sorte le cycle de vie des opération sur la base de donnée. Des callbacks sont donc définies pour chaque évolution du schéma de la DB : oncreate() onupgrade() ondowngrade()

SQLite 12 En general, le Helper permettra également d implanter les requêtes sur la base de données, c est à dire sur l objet SQLiteDatabase. Pour écrire des données dans la table on pourra effectuer une insertion simple : SQLiteDatabase db = this.getwritabledatabase(); ContentValues values = new ContentValues(); values.put(field_1, val1); values.put(field_2, val2); values.put(field_3, val3); long added = db.insertorthrow(nom_table, null, values);

SQLite 13 Pour mettre à jour des données dans la table : ContentValues values = new ContentValues(); values.put(field_2, valeur); long id = this.getwritabledatabase().update(nom_table, values, FIELD_KEY+"=?", new String[]{""+id}); Pour «lire» des données : Cursor c = getreadabledatabase().query(nom_table, new String[]{ FILED_2, FIELD_3 }, new String[]{ FILED_1+"=?" }, new String[]{ ""+id }, null, null, null);

SQLite 13 Pour mettre à jour des données dans la table : ContentValues values = new ContentValues(); values.put(field_2, valeur); long id = this.getwritabledatabase().update(nom_table, values, FIELD_KEY+"=?", new String[]{""+id}); Pour «lire» des données : c.movetofirst(); while (c.isafterlast()) {.. c.getint(2)); c.movetonext(); } c.close();

SQLite 14 Exécuter directement des requêtes SQLite : Cursor c = this.getreadabledatabase().rawquery( "select * from " + NOM_TABLE, new String[0]); Exécuter des requêtes n ayant pas de retour : this.getreadabledatabase().execsql( "CREATE TABLE " + NOM_TABLE + " (id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT, prenom TEXT)");

SQLite 15 Le développeur implante les méthodes du «cycle de vie» de la base de données. C est à dire la création ou la modification du schéma conceptuel de la base. public void oncreate(sqlitedatabase db){ db.execsql("create TABLE " + NOM_TABLE + " (id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT, prenom TEXT)"); } Mise à jour du schéma de la base : public void onupgrade(sqlitedatabase db, int oldversion, int newversion){ db.execsql("drop TABLE IF EXISTS " + NOM_TABLE); this.oncreate(db); }