Qu’est-ce que Uri Matcher dans android.content.UriMatcher
Comment l’utiliser? Quelqu’un peut-il s’il vous plaît expliquer le sens de suivre trois lignes de code?
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(PROVIDER_NAME, "cte", uriCode); uriMatcher.addURI(PROVIDER_NAME, "cte/*", uriCode); int res = uriMatcher.match(uri);
UriMatcher est une classe pratique lorsque vous écrivez un ContentProvider ou une autre classe qui doit répondre à un certain nombre d’URI différents. Dans votre exemple, un utilisateur peut interroger votre fournisseur avec des URI tels que:
myprovider://cte
ou
myprovider://cte/somessortingng
Lorsque vous construisez un UriMatcher, vous devez avoir des codes distincts pour chaque URI (pas seulement “uriCode” comme dans votre exemple). Je rends généralement mon instance UriMatcher statique et ajoute les URI dans un constructeur statique:
private static final int CTE_ALL = 1; private static final int CTE_FIND = 2; private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { uriMatcher.addURI(PROVIDER_NAME, "cte", CTE_ALL); uriMatcher.addURI(PROVIDER_NAME, "cte/*", CTE_FIND); }
Ensuite, dans votre fournisseur de contenu, vous feriez quelque chose comme ceci dans votre méthode de requête:
Cursor query(Uri uri, Ssortingng[] projection, Ssortingng selection, Ssortingng[] selectionArgs, Ssortingng sortOrder) { int res = uriMatcher.match(uri); switch (res) { case CTE_ALL: //TODO create a results Cursor with all the CTE results break; case CTE_FIND: //TODO create a results Cursor with the single CTE requested break; } return results; }
J’ai trouvé les vidéos suivantes utiles:
Bases de l’URI
URI Matcher
Essentiellement, vous essayez d’avoir un identifiant ou un numéro associé à différents URI. Lorsque vous utilisez addUri, un code / numéro / ID est créé pour l’URI. Lorsque vous demandez une correspondance (), le code correspondant est renvoyé.