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 !
If you created database for example with fields 'a', 'b' and 'c' and used this db then if you add new field (for ex. 'd') you need to recreate database on phone (just delete it).