Que signifie “instruction non valide dans fillWindow()” dans Android curseur veux dire?
Je vois parfois cette erreur dans mon logcat
de sortie,
Cursor: invalid statement in fillWindow().
Il arrive parfois, lorsque j'appuie sur la touche retour, puis il va à la valeur par défaut d'Android listview
avant d'aller à mon habitude listview
.
Ça veut dire quoi? Comment puis-je le résoudre? Parce qu'il ne pointe sur aucune ligne de code où vient le problème.
- Ayant le même problème, je viens de trouver ce. Il se rapporte à la façon dont votre db est probablement dans le mauvais champ d'application. groups.google.com/group/android-developers/browse_thread/thread/...
Vous devez vous connecter pour publier un commentaire.
Lorsque vous traitez avec ListActivities, cette question a à voir avec le Curseur objets, CursorAdapter objets, et les objets de Base de données n'étant pas fermé correctement lors de l'arrêt de l'Activité, et de ne pas être correctement réglé lorsque l'Activité commence ou reprend.
J'ai dû faire en sorte que j'ai fermé mon SimpleListAdapter, mon Curseurs, et puis mes objets de Base de données dans l'ordre, dans la méthode onStop de l'Activité qui est appelée lorsque l'TabActivity reprend.
J'avais déjà été la fermeture du Curseur et les objets de Base de données, mais n'avait pas été la fermeture de mon SimpleListAdapter Curseur.
Il est de la plus haute importance que vous fermez les Curseurs, les Bases de données, DBHelpers dans le bon ordre.
par exemple
pour le code donné ci-dessous.
l'ordre de fermeture devrait être comme:
Autrement les différentes erreurs garder sur le frai et le développeur ne vient même pas à le savoir. "Cursor: instruction non valide dans fillWindow()" être l'un de ces erreurs.
Peut-être cela peut vous aider: http://www.ragtag.info/2011/feb/1/database-pitfalls/
Il semble que les appels à la getReadableDatabase et getWritableDatabase retourne la même de connexion à la base de données (même si vous avez fait plusieurs appels à eux).
Ainsi, tout appel à close() sur l'un d'eux va à la fermeture de la connexion(s).
Si vous avez essaye d'utiliser un curseur plus tard, vous aurez la belle déclaration Invalide', puisque la connexion de laquelle le curseur se fie est déjà fermé.
Si vous utilisez une occurrence de Classe personnalisée par exemple
Model m
qui est titulaire d'unDatabaseManager
, qui détient uneSQLiteDatabase
: Model->DatabaseManager->SQLiteDatabaseAlors, si vous faites une requête de m (ce qui n'est le cas délégations) et puis tu fais quelque chose comme
m.close()
(ce qui ferme laSQLiteDatabase
) et après que vous essayez d'utiliser le Curseur, vous obtiendrez cette erreur.La solution est: d'abord utiliser le curseur, puis fermez la Db.
Ma réponse est basée dans les 2 existants jusqu'à présent, qui m'a inspiré pour résoudre le problème.
Je suis toujours avoir des problèmes avec le 'instruction non Valide dans fillWindow()' erreur.
J'ai rétréci la question de la SimpleCursorAdapter curseur pour ma ListView.
Par exemple, si je suis dans la listview pour une Activité Un, et je ferme le curseur avant le démarrage d'une nouvelle Activité B, je n'ai pas l 'instruction non Valide dans fillWindow ()" quand je suis de retour à l'Activité A.
Toutefois, avant d'Activité B charges, je vois la liste de l'Activité de la listview disparaître de l'écran, et la "Aucun enregistrement Trouvé" affiche brièvement avant que l'écran est masqué, avant d'Activité B s'affiche à l'écran.
Comment puis-je gracieusement résoudre ce problème?
EDIT:
J'ai en fait compris cela ce matin. J'ai ajouté
this.stopManagingCursor(this.myListCursor);
à la méthode onPause dans mon ListActivity classes, et qui a résolu le 'instruction non Valide dans fillWindow()' erreur.