This is my first attempt to write/read to a database using Android and SQLite.
The code below appears to be inserting data (I can see an increment in number of rows) but when I try to call the value, an exception is thrown
E/CursorWindow﹕ Failed to read row 0, column -1 from a CursorWindow which has 6 rows, 2 columns.
I can't see why the below is failing.
public void Save(String name, String email) {
_db.execSQL("CREATE TABLE IF NOT EXISTS MailingList (Email VARCHAR, Name VARCHAR);");
_db.execSQL("INSERT INTO MailingList (Email, Name) VALUES('" + email + "', '" + name + "');");
ReadDatabase();
_db.close();
//_db.deleteAll();
}
private void ReadDatabase() {
Cursor cursor = _db.rawQuery("SELECT * FROM MailingList", null);
int i = cursor.getCount();
ArrayList<String> results = new ArrayList<String>();
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("Name")); //ERROR
String email = cursor.getString(cursor.getColumnIndex("Email"));
results.add("Name: " + name + ", Email: " + email);
} while (cursor.moveToNext());
}
}
ListView myList = (ListView) findViewById(R.id.listViewFromDB);
myList.setAdapter(new ArrayAdapter<String>(this, R.layout.item_layout, results));
}
LogCat
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:435)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.lmsites.dave.lifecrymailinglist.MyActivity.ReadDatabase(MyActivity.java:106)
at com.lmsites.dave.lifecrymailinglist.MyActivity.Save(MyActivity.java:88)
at com.lmsites.dave.lifecrymailinglist.MyActivity.SaveClick(MyActivity.java:73)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at android.view.View$1.onClick(View.java:3830)
at android.view.View.performClick(View.java:4450)
at android.view.View$PerformClick.run(View.java:18600)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5026)
at java.lang.reflect.Method.invokeNative(Native Method)