Im having some troubles trying to get the info stored in my database and showing it in a ListView.
This is the ListActivity where i want to show the rows:
public class Prueba extends ListActivity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.i_prueba);
DataBaseAccess db = new DataBaseAccess(this);
db.open();
Cursor result = db.getAllContact();
startManagingCursor(result);
// the desired columns to be bound
String[] columns = new String[] {"_id", "nombre", "telefono", "mail"};
// the XML defined views which the data will be bound to
int[] to = new int[] { R.id.textid, R.id.textNombre, R.id.textTelefono, R.id.textMail };
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.i_listadb, result, columns, to);
this.setListAdapter(mAdapter);
}
The DB class. Here is the method getAllContact where i get the error:
public class DataBaseAccess {
public static final String NOMBRE = "nombre";
public static final String TELEFONO = "telefono";
public static final String MAIL = "mail";
public static final String ID = "_id";
public DataBaseAccess(Context context) {
this.androidContext = context;
//DataBaseHelper is another class where the Database is created. In the "onCreate" //method of that class is where i make the CREATE TABLE and add some values to that //table.
dbHelper = new DataBaseHelper(androidContext);
}
public void open() throws SQLException {
db = dbHelper.getWritableDatabase();
}
[...MORE METHODS...]
public Cursor getAllContact(){
String[] columnas = new String[] {ID, NOMBRE, TELEFONO, MAIL};
Cursor mCursor = dbHelper.query("t_contactos", columnas, null, null, null, null, null);
if (mCursor != null){
mCursor.moveToFirst();
}
return mCursor;
}
}
And here is the error messages from the LogCat:
E/AndroidRuntime( 636): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 636): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pfc.android/com.pfc.android.Prueba}: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, nombre, telefono, mail FROM t_contactos
E/AndroidRuntime( 636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
E/AndroidRuntime( 636): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
E/AndroidRuntime( 636): at android.app.ActivityThread.access$2100(ActivityThread.java:116)
E/AndroidRuntime( 636): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
E/AndroidRuntime( 636): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 636): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 636): at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime( 636): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 636): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 636): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime( 636): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime( 636): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 636): Caused by: android.database.sqlite.SQLiteException: no such column: _id: , while compiling: SELECT _id, nombre, telefono, mail FROM t_contactos
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteProgram.native_compile(Native Method)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:49)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1118)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1006)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:964)
E/AndroidRuntime( 636): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1041)
E/AndroidRuntime( 636): at com.pfc.android.DataBaseAccess.getAllContact(DataBaseAccess.java:97)
E/AndroidRuntime( 636): at com.pfc.android.Prueba.onCreate(Prueba.java:21)
E/AndroidRuntime( 636): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
E/AndroidRuntime( 636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
E/AndroidRuntime( 636): ... 11 more
So, can anybody help to get through this? Thank you in advance !
You probably don't have a column _id in your database table. Pull the database and open it with SqliteViewer to check if it actually exists. The database is usually under /data/data/com.yourapp.package/databases/
You can use: http://sqlitebrowser.sourceforge.net/ or http://www.navicat.com/en/products/navicat_sqlite/sqlite_overview.html (they also have a free lite version)