studio - get data from cursor android
No se pudo crear la ventana del cursor desde el cuaderno (3)
Probar otro hilo
new Thread(new Runnable(){ public void run(){
...here all code
}});
. Pero los códigos fuente de Android SDK se ven como 4.0.2_r1
130 private CursorWindow(Parcel source) {
131 mStartPos = source.readInt();
132 mWindowPtr = nativeCreateFromParcel(source);
133 if (mWindowPtr == 0) {
134 throw new CursorWindowAllocationException("Cursor window could not be "
135 + "created from binder.");
136 }
137 mName = nativeGetName(mWindowPtr);
138 mCloseGuard.open("close");
139 }
donde mWIndowPtr es Int
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 }
Luego, en la línea # 3 (de acuerdo con los registros), de vez en cuando me encuentro con esta excepción (extracto a continuación):
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)
...
¿Alguna idea de por qué está lanzando esta excepción? ¡Gracias!
Prueba de esta manera:
if (cursor != null) { cursor.moveToFirst(); do { first = cursor.getString(cursor.getColumnIndex("first")); }while(cursor.moveToNext());
}
Sospecho que el error puede estar relacionado con que no cierre sus cursores correctamente todo el tiempo. Tratar:
Cursor cursor = contentResolver.query(MY_URI, new String[] { "first" }, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
first = cursor.getString(cursor.getColumnIndex("first"));
}
cursor.close(); ///// Changed here
}
El cursor siempre debe estar cerrado (independientemente de si está vacío o no). Asegúrate de que el resto de tu aplicación también esté haciendo esto.