Hi am trying to create a android app with a sql database and i want to list my results in a listview but cant seem to get it to work please help I have this so far and am getting the error
java.lang.IllegalArgumentException: column ‘_id’ does not exist
SimpleCursorAdapter adp;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db.open();
// from array: keeps the names of the Cursor columns.
String[] from = {"CURSOR_FIELD1","CURSOR_FIELD2"};
// to array: keeps the ids of the fields in your list item layout
int[] to = {R.id.itemLayoutfield1, R.id.itemLayoutfield2};
// sets the basic layout of the ListActivity (the layout must contain a ListView element with the id called 'list').
setContentView(R.layout.view_data_layout);
// gets de cursor with the rows
c = db.getAllCourses();
adp = new SimpleCursorAdapter(this, R.layout.row, c, from, to);
setListAdapter(adp);
ListView listView = getListView();
listView.setTextFilterEnabled(true);
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(),
((TextView) view).getText(), Toast.LENGTH_SHORT).show();
displayAllCourses(c);
db.close();
}
});
and my dbadapter i have
public Cursor getAllCourses() {
return db.query(DATABASE_TABLE, new String[] { ID, Time_Amount,
Seed_Acre, MM_Settings, Acre_amount, Speed_Type, Acre_String, Seed_Type, Hill_Name }, null, null,
null, null, null, null);
}
public Cursor getCourse(long rowId) throws SQLException {
Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { ID,
Time_Amount, Seed_Acre, MM_Settings, Acre_amount, Speed_Type, Acre_String, Seed_Type, Hill_Name },
ID + "=" + rowId, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Your ‘hill‘ String array just contains one single item (which is not even the first row of the table).
To show the results of a query from a Cursor you’d better use the SimpleCursorAdapter object, intead of the ArrayAdapter, this object helps you to map the results of the query (cursor) to the fields of your View (user interface). It would be something like that:
Important note: Keep in mind that the CursorAdapter class and it’s subclasses (i.e. SimpleCursorAdapter) needs that the primary key of the tables are named _id.
The listLayout.xml should be similar to (notice that it has a ListView with id ‘list‘):
And the itemlayout.xml could be something like: