09.02.2017 Views

creez-des-applications-pour-android

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5 Concepts avancés<br />

5.3.2.2 Le type MIME<br />

Android a besoin de connaître le type MIME <strong>des</strong> données auxquelles donne accès votre fournisseur<br />

de contenu, afin d’y accéder sans avoir à préciser leur structure ou leur implémentation. On a de<br />

ce fait besoin d’une méthode qui indique ce type (String getType(Uri uri)) dont le retour<br />

est une chaîne de caractères qui contient ce type MIME.<br />

Cette méthode devra être capable de retourner deux formes de la même valeur en fonction de ce<br />

que veut l’utilisateur : une seule valeur ou une collection de valeurs. En effet, vous vous souvenez,<br />

un type MIME qui n’est pas officiel doit prendre sous Android la forme vnd.<strong>android</strong>.cursor.X<br />

avec X qui vaut item <strong>pour</strong> une ligne unique et dir <strong>pour</strong> une collection de lignes. Il faut ensuite<br />

une chaîne qui définira le type en lui-même, qui doit respecter la forme vnd...<br />

Voici ce que j’ai choisi :<br />

vnd.<strong>android</strong>.cursor.item/vnd.sdz.chapitreQuatre.example.provider.table1<br />

vnd.<strong>android</strong>.cursor.dir/vnd.sdz.chapitreQuatre.example.provider.table1<br />

C’est ici que l’UriMatcher prendra tout son intérêt :<br />

public static final String AUTHORITY = "sdz.chapitreQuatre.provider.MembreProvider" ;<br />

public static final String TABLE_NAME = "metier" ;<br />

public static final String TYPE_DIR =<br />

"vnd.<strong>android</strong>.cursor.dir/vnd." + AUTHORITY + "." + TABLE_NAME;<br />

public static final String TYPE_ITEM =<br />

"vnd.<strong>android</strong>.cursor.item/vnd." + AUTHORITY + "." + TABLE_NAME;<br />

public String getType(Uri uri) {<br />

// Regardez dans l'exemple précédent, <strong>pour</strong> toute une table on avait la valeur 0<br />

if (membreMatcher.match(uri) == 0) {<br />

return(TYPE_DIR);<br />

}<br />

}<br />

// Et si l'URI correspondait à une ligne précise dans une table, elle valait 1<br />

return(TYPE_ITEM);<br />

5.3.2.3 Le stockage<br />

Comment allez-vous stocker les données ? En général, on utilise une base de données, mais vous<br />

pouvez très bien opter <strong>pour</strong> un stockage sur support externe. Je vais me concentrer ici sur l’utilisation<br />

<strong>des</strong> bases de données.<br />

On va avoir une classe qui représente la base de données et, à l’intérieur de cette classe, <strong>des</strong> classes<br />

internes constantes qui représenteront chaque table. Une classe constante est une classe déclarée<br />

avec les modificateurs static final. Cette classe contiendra <strong>des</strong> attributs constants (donc qui<br />

possèdent aussi les attributs static final) qui définissent les URI, le nom de la table, le nom<br />

de ses colonnes, les types MIME ainsi que toutes les autres données nécessaires à l’utilisation du<br />

372

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!