Curseur de la fenêtre ne peut pas être créé à partir de classeur
1 Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
2 if (cursor != null) {
3 if (cursor.moveToFirst()) {
4 first = cursor.getString(cursor.getColumnIndex("first"));
5 cursor.close();
6 }
7 }
Puis sur la ligne n ° 3 (selon les journaux), je chaque maintenant et puis je tombe sur cette exception (extrait ci-dessous):
android.database.CursorWindowAllocationException: Cursor window could not be created from binder.
at android.database.CursorWindow.<init>(CursorWindow.java:134)
at android.database.CursorWindow.<init>(CursorWindow.java:41)
at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:709)
at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:707)
at android.database.CursorWindow.newFromParcel(CursorWindow.java:718)
at android.database.BulkCursorProxy.getWindow(BulkCursorNative.java:196)
...
Des idées pourquoi il est en train de lancer cette exception? Merci!
- essayez cette link
- Le nombre de lignes dans la base de données qui est la sauvegarde de la
ContentResolver
? Cette exception est levée si le curseur ne parvient pas à allouer suffisamment d'espace pour stocker les données dont il a besoin. Puisque vous n'êtes pas limiter le nombre de lignes dans votre requête via la sélection args, votrecursor
va allouer de l'espace à conserver une copie de l'ensemble de la colonnefirst
dans la mémoire. Si il y a un grand nombre de lignes, potentiellement, le processus peut ne pas allouer de la mémoire. - il n'y a qu'une ligne, c'est pourquoi je n'ai pas fait une boucle pour elle.
- La seule autre chose que je peux penser, c'est que c'est l'obtention d'un corrompu colis de retour.
- Pouvez-vous élaborer sur la "corruption de colis". Cette exception n'est pas toujours rencontré, mais il y a des moments où il est rencontré, je me demande si c'est parce que d'autres choses.
- Le code est un échec au
CursorWindow$1.createFromParcel
, qui est d'essayer de créer unCursorWindow
à partir d'unParcel
objet. Si ce n'est pas faute de sur la répartition, elle pourrait être en défaut parce qu'il n'est pas d'obtenir des données pour le colis correctement. Je ne peux que spéculer sur les raisons qui pourraient être peut-être la connexion à lacontentResolver
n'est pas plus valable (comme garder un rassis poignée pendant dispositif de rotation, le thread d'arrière-plan, etc), l'autre extrémité du contenu de résolution n'est pas là une raison (pas de connexion de données, carte SD montée, etc.), ou d'un autre problème - si vous voulez des résultats, puis utiliser la commande par ex. dernier paramètre de la fonction et de l'inclure limiter, par exemple, utiliser "id DESC limit 1" pour commander votre résultat en fonction de l'id avec un seul résultat
Vous devez vous connecter pour publier un commentaire.
Je crois que l'erreur peut être lié à vous de ne pas fermer vos curseurs correctement tout le temps. Essayez:
Le curseur doit toujours être fermé (indépendamment de si oui ou non son vide). Assurez-vous que le reste de votre application est en train de faire cela.
Essayer un autre thread
. Mais par Android SDK source des codes de ressembler à 4.0.2_r1
où mWIndowPtr est Int
Essayer de cette façon: