7
votes

Comment forcer un fournisseur de contenu à réinitialiser lors de la suppression manuelle de la base de données

Dans mon application, j'ai un contenu de contenu attaché à une table dans une base de données avec un curseur qui remplit une liste de réception dans l'une de mes activités. Cette table est remplie vide par défaut et est remplie de données d'entrée utilisateur. Je souhaite permettre à l'utilisateur de supprimer complètement toutes leurs données stockées et je supprime la base de données complète lorsque cette option est sélectionnée. La base de données est ensuite recréée dans son état par défaut lorsque l'utilisateur démarre à nouveau à l'aide de l'application, tout comme il le ferait la première fois qu'ils utilisaient l'application.

Mon problème est que je supprimai la base de données, le contenuProvider ne détecte pas que la base de données a été supprimée et lorsque je retourne à mon activité ListView, la liste est toujours là. Je fais également que l'application rechargez complètement l'activité ListView au lieu de simplement reprendre la mémoire et la liste est toujours là même si la base de données est vide. Le seul moyen de récupérer le fichier de rechargement de ContentProvider est de tuer l'application dans les paramètres système, puis de l'ouvrir à nouveau.

Y a-t-il un moyen de redémarrer avec force le fournisseur de contenu ou de le dire que les données ont été mises à jour de l'extérieur de la classe de contenu de contenu lui-même?


0 commentaires

3 Réponses :


0
votes

Vous souhaitez remplir la liste ListView avec un cursoradapter et avertir le curseur lorsque le contenu a changé dans le contenu de contenu.

Dans votre méthode de suppression de votre implémentation de contenuProvider, appelez contentResolver.Notify . Cela informera le curseur peuplé de l'appel à contentreSolver qu'il y a eu un changement dans les données.


4 commentaires

Oui, c'est ce que je fais. Le problème ici est que le contenu de contenu est connecté uniquement à une table de ma base de données et une activité distincte qui n'utilise pas le fournisseur supprime la totalité de la base de données lorsque l'utilisateur souhaite via GetApplicationContext (). DeleteDatabase (MyDB). Existe-t-il un moyen d'envoyer une gâchette au fournisseur pour le redémarrer / rafraîchir lorsque je n'ai pas d'accès direct au contenuResolver? J'utilise actuellement la méthode de suppression de mon fournisseur pour supprimer des lignes individuelles de la table utilisée pour mon listeView / Cursoradapter, comme vous le suggérez.


Si vous utilisez un chargeur pour charger la liste ListView, vous pouvez également appeler simplement redémarrer sur le chargeur juste après avoir supprimé votre base de données.


Je jouais juste avec ça et cela n'a pas réparer mon problème. À travers une recherche plus créative, j'ai trouvé ce problème et la solution a fonctionné: Stackoverflow.com/a/8235584/1943155


Merci d'avoir essayé d'aider!



1
votes

J'ai trouvé la solution à mon problème ici: https://stackoverflow.com/a/8235584/1943155 < / p>

Je reçois mon dbhelper dans l'ONCREATE de ma classe de contenu de contenu, comme dans l'autre poste et que vous obtenez un nouveau dbhelper dans chaque méthode fixe mon problème.


0 commentaires

3
votes

Vous pouvez également utiliser simplement la méthode Supprimer du fournisseur de contenu sans définir une sélection:

context.getContentResolver().delete(YourProvider.CONTENT_URI, null, null);


1 commentaires

Je doute de cette solution, veuillez montrer pourquoi vous croyez que cela fonctionne.