2010-07-13 13 views
9

Tengo una tabla llamada "master" con columnas id, name, surname, gender y designationIllegalArgumentException: la columna '_id' no existe cuando la llamada a SimpleCursorAdaptor

cuando un incendio de una consulta para obtener un Cursor objeto para un CursorAdapter me sale:

IllegalArgumentException: column '_id' does not exist when call to CursorAdaptor 

Pero no tengo un columen llamado "_id".

¿Alguien me puede decir por qué me sale este error?

Aquí es el seguimiento 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) 

Respuesta

16

Esto sucede porque CursorAdapter debe tener una columna _id en la tabla que está utilizando.

Con la base de datos (SQLite) en aplicaciones de Android, es mejor agregar una columna denominada _id" a todas las tablas con el fin de poder utilizar CursorAdapter.

Como alternativa, puede escribir una instrucción SQL como

select member_id as _id from member _table where ....." 

con el fin de obtener una Cursor que puede ser utilizado con CursorAdapter

Esto se especifica en CursorAdaptor 's documentation:.

adaptador que expone los datos de un cursor para un widget ListView. El cursor debe incluir una columna denominada "_id" o esta clase no va a funcionar."

1

Sus namemaster mesas tiene que tener una columna _ID definido para ser utilizado por SimpleCursorAdaptor. Asegúrese de que el esquema de su tabla incluya _ID y no un id ya que el último es incorrecto.

0

creo que el SimpleCursorAdapter asume que hay un '_id' columna. Necesita crearlo para que le sea más fácil usar "_id" en lugar de su propio "id". Lea el segundo post en este page

1

simple y salado

Para superar este problema, usted tiene que cambiar el nombre del campo de clave principal como _id.

Cuestiones relacionadas