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:

 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) 

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

  • Uso de SQLite desde libGDX en Android
  • Estoy usando SQLCIPHER para leer o escribir la base de datos que consigue el error
  • Android Firebase actualiza sólo algunos campos
  • Android - Guardar ubicación en la base de datos SQLite
  • Android: actualizar la versión de la base de datos y agregar nueva tabla
  • ¿Cómo sincronizar bases de datos SQLite y MySQL mediante notificaciones push?
  • Cómo poner base de datos existente en el archivo .apk?
  • Persistencia de datos de usuario de servicios en línea para "visualización sin conexión" en aplicaciones de Android
  • La mejor manera de agrupar fotos con app: archivos o en la base de datos sqlite?
  • Integración de SQLCIPHER en el proyecto de Android Studio
  • Aplicación de diccionario androide con base de datos sin conexión
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.