IllegalArgumentException: columna '_id' no existe cuando llama a SimpleCursorAdaptor
Tengo una tabla llamada "maestro" con columnas id
, name
, surname
, gender
y designation
Cuando disparo una consulta para obtener un objeto Cursor para un CursorAdapter obtengo:
- Sumar los datos del firebase eficientemente
- Práctica recomendada para eliminar asincrónicamente un elemento ListView / RecyclerView
- Pedido de datos con Firebase Android
- Android: Utilizar SimpleCursorAdapter para obtener datos de la base de datos a ListView
- ¿Cómo conectar el teléfono de android a un servicio de la tela funcionado en el servidor local?
IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor
Pero no tengo un columen llamado "_id".
¿Puede alguien decirme por qué estoy recibiendo este error?
Aquí está el rastreo de la pila:
07-13 15:45:40.582: WARN/System.err(295): java.lang.IllegalArgumentException: column '_id' does not exist 07-13 15:45:40.592: WARN/System.err(295): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 07-13 15:45:40.592: WARN/System.err(295): at android.widget.CursorAdapter.changeCursor(CursorAdapter.java:257) 07-13 15:45:40.602: WARN/System.err(295): at com.praumtech.names4baby.ui.NamesListAdapter.setCursor(NamesListAdapter.java:63) 07-13 15:45:40.602: WARN/System.err(295): at com.praumtech.names4baby.ui.BoysNamesListActivity.initNameList(BoysNamesListActivity.java:79) 07-13 15:45:40.602: WARN/System.err(295): at com.praumtech.names4baby.ui.BoysNamesListActivity.onCreate(BoysNamesListActivity.java:49) 07-13 15:45:40.602: WARN/System.err(295): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 07-13 15:45:40.602: WARN/System.err(295): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 07-13 15:45:40.612: WARN/System.err(295): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 07-13 15:45:40.612: WARN/System.err(295): at android.app.ActivityThread.access$2100(ActivityThread.java:116) 07-13 15:45:40.612: WARN/System.err(295): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 07-13 15:45:40.612: WARN/System.err(295): at android.os.Handler.dispatchMessage(Handler.java:99) 07-13 15:45:40.621: WARN/System.err(295): at android.os.Looper.loop(Looper.java:123) 07-13 15:45:40.621: WARN/System.err(295): at android.app.ActivityThread.main(ActivityThread.java:4203) 07-13 15:45:40.621: WARN/System.err(295): at java.lang.reflect.Method.invokeNative(Native Method) 07-13 15:45:40.621: WARN/System.err(295): at java.lang.reflect.Method.invoke(Method.java:521) 07-13 15:45:40.621: WARN/System.err(295): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 07-13 15:45:40.621: WARN/System.err(295): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 07-13 15:45:40.631: WARN/System.err(295): at dalvik.system.NativeStart.main(Native Method)
- Reiniciar CursorLoader no refleja la eliminación de la base de datos
- leer datos de la base de datos y mostrarlo en GridView en android
- No se pudo recuperar datos de la base de datos a listview.
- Adaptador de cursor y ejemplo sqlite
- ¿Cómo puedo extraer bases de datos de mi Android en mi escritorio?
- Inserción SQLite de Android única
- Genymotion. Cómo extraer la base de datos del dispositivo. Mi / data / data / carpeta parece estar vacía
- Android abrir o crear base de datos
Esto sucede porque CursorAdapter
debe tener una columna _id
en la tabla que está utilizando.
Con la base de datos (SQLite) en las aplicaciones de Android, es mejor agregar una columna llamada _id "a todas las tablas para poder usar CursorAdapter
.
Alternativamente, puede escribir una sentencia SQL como
select member_id as _id from member _table where ....."
Con el fin de obtener un Cursor
que se puede utilizar con CursorAdapter
.
Esto se especifica en la documentación de CursorAdaptor
:
Adaptador que expone datos de un Cursor a un widget ListView. El Cursor debe incluir una columna llamada "_id" o esta clase no funcionará. "
namemaster
tablas namemaster
deben tener una columna _ID
definida para ser utilizada por SimpleCursorAdaptor. Asegúrese de que su esquema de tabla incluye _ID
y no un id
como el último es incorrecto.
Simple y salado
Para solucionar este problema, tiene que cambiar el nombre del campo de clave principal como _id
.
Creo que el SimpleCursorAdapter asume que hay una columna '_id'. Necesitas crearlo así que probablemente sería más fácil para ti usar "_id" en lugar de tu propio "id". Lea el segundo post de esta página
- ¿Cómo aumentar el tamaño de la casilla de verificación en las páginas web basadas en el navegador móvil o en la tableta?
- Las pestañas de Tablayout de Android con la insignia de notificación como whatsApp