Propre ContentProvider avec SQLite et plusieurs tables
Je suis de lecture ce tutoriel sur la mise en œuvre de mon propre ContentProvide pour travailler avec SQLite. Int le ContentProvider.requête il y a quelques chose qui m'intrigue, c'. Il semble très codé en dur pour une seule table (la table todo dans le tutoriel), mais peut-être Im tout simplement pas l'obtenir? Maintenant, si je voulais une requête à une autre table, permet de dire nodo, comment pourrais-je changer le ContentProvider?
Dois-je ajouter les noms de table en quelque sorte le queryBuilder.setTables(String inTables)?
Ce sujet de la CONTENT_TYPE et CONTENT_ITEM_TYPE, devrait y en avoir un pour chaque table?
Que sur la tâche et TODO_ID varibles et le commutateur dans la méthode de requête?
Il semble que j'ai besoin d'avoir beaucoup de si/commutateur de conditions à l'appui de plusieurs tables avec le même ContentProvider, est-ce la voie à suivre ou suis-je sur un mauvais chemin?
Merci
Søren
OriginalL'auteur Neigaard | 2012-11-26
Vous devez vous connecter pour publier un commentaire.
De l'interrogation d'une nouvelle table signifie que vous avez besoin pour ajouter un nouveau
Uri
, depuis leUri
sélectionne la source de données, similaire à l'utilisation d'une autre table.Vous serait ajouter essentiellement toutes les valeurs codées en dur qui sont déjà là pour les todos pour votre autre table. Par exemple:
Oui, si différents
Uri
s en lecture à partir de différentes tables puis mettre la table basée sur l'Uri de match.Varie selon le type de contenu. Si elles sont différentes et vous avez besoin d'un type oui. Mais vous n'avez pas besoin de les avoir. Cet exemple définit eux, mais ne pas les utiliser. Il serait nécessaire de retourner le type de
getType
, voir la documentation.Ceux sont des constantes définies pour le
UriMatcher
qui est expliqué bien ici. C'est en fait une simplification de la Chaîne de mise en correspondance. Un grandContentProvider
peut avoir 100 différents Uri et de la sélection de la table de droite dansquery
serait douloureux si vous devez écrireif (uri.getPath().equals("todos") { /* code */} else if (uri..
tout le chemin.OriginalL'auteur zapl
Voici solution à votre question, à l'aide de UriMatcher, vous pouvez mettre en œuvre plusieurs tables dans un fournisseur de contenu.
OriginalL'auteur jbmeta
Type de contenu et le contenu de l'élément peut être comme suit et ils peuvent être enveloppés dans une catégorie distincte pour chaque table
public static final String GENERAL_CONTENT_TYPE = "vnd.android.cursor.dir/vnd.myfirstapp.db.member" ;
public static final String SPECIFIC_CONTENT_TYPE = "vnd.android.cursor.item/vnd.myfirstapp.db.member" ;
`vnd.android.le curseur.dir/vnd.yourownanything.quoi que ce soit.nom de la table'
définit le général type de contenu
`vnd.android.le curseur.item/vnd.anthingasabove.la table"
ce qui définit également le spécifique et elle est constante à n'importe quelle application de ces chaînes de caractères(mots) vnd.android.le curseur.dir et .l'élément doit être comme ça et après /vnd. doit être comme ça
et dans la classe qui étend la classe contentprovider vous venez de uset la même instance de UriMatcher à la carte les tables
OriginalL'auteur Nasz Njoka Sr.