Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
290 L’art du développement Android
query()
Comme l’on pourrait s’y attendre, la méthode query() contient le code grâce auquel le
fournisseur de contenu obtient des détails sur une requête qu’une activité veut réaliser.
C’est à vous de décider d’effectuer ou non cette requête.
La méthode query() attend les paramètres suivants :
● Une Uri représentant la collection ou l’instance demandée.
● Un String[] contenant la liste des propriétés à renvoyer.
● Un String représentant l’équivalent d’une clause WHERE de SQL et qui contraint le
résultat de la requête.
● Un String[] contenant les valeurs qui remplaceront les éventuels marqueurs d’emplacements dans le paramètre précédent.
● Un String équivalant à une clause ORDER BY de SQL.
C’est vous qui êtes responsable de l’interprétation de ces paramètres et vous devez
renvoyer un Cursor qui pourra ensuite être parcouru pour accéder aux données.
Comme vous pouvez vous en douter, ces paramètres sont fortement orientés vers l’utilisation de SQLite comme moyen de stockage. Vous pouvez en ignorer certains (la clause
WHERE, par exemple) mais vous devez alors l’indiquer pour que les activités ne vous
interrogent que par une Uri d’instance et n’utilisent pas les paramètres que vous ne gérez
pas. Pour les fournisseurs qui utilisent SQLite, toutefois, l’implémentation de la méthode
query() devrait être triviale : il suffit d’utiliser un SQLiteQueryBuilder pour convertir
les différents paramètres en une seule instruction SQL, puis d’appeler la méthode query()
de cet objet pour invoquer la requête et obtenir le Cursor qui sera ensuite renvoyé par
votre propre méthode query().
Voici, par exemple, l’implémentation de la méthode query() de Provider :
@Override
public Cursor query(Uri url, String[] projection, String selection,
String[] selectionArgs, String sort) {
SQLiteQueryBuilder qb=new SQLiteQueryBuilder();
qb.setTables(getTableName());
if (isCollectionUri(url)) {
qb.setProjectionMap(getDefaultProjection());
}
else {
qb.appendWhere(getIdColumnName() + "=" +
url.getPathSegments().get(1));
}
String orderBy;
if (TextUtils.isEmpty(sort)) {
orderBy=getDefaultSortOrder();
} else {
Livre Android.book Page 290 Dimanche, 8. novembre 2009 12:23 12
Précédent

- 305/391

Suivant