Сегодня я хотел реализовать простую базу данных SQLite в своем приложении для обмена сообщениями, которое должно заботиться о сохранении сообщений, к сожалению, я не могу прочитать данные из базы данных и отобразить их в ListView.Android SQLite throws Не удалось прочитать строку 0, столбец -1 из CursorWindow
Я просмотрел базу данных через ADB на своем эмуляторе, и я увидел, что данные сохранены правильно.
Вот мой код
Инициализация таблицы с пустой колонкой
db.execSQL("CREATE TABLE IF NOT EXISTS Messages(zero);");
Создание столбца с чатом контактом в качестве имени столбца
public void addMessagetoDB(String message, String from) {
Toast.makeText(this.getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show();
try
{
db.execSQL("ALTER TABLE Messages ADD COLUMN '" + from + "' TEXT");
}
catch (android.database.sqlite.SQLiteException e)
{
}
db.execSQL("INSERT INTO Messages ('" + from + "') VALUES('" + message + "');");
}
Здесь я могу также см., что SQLite распознает имена моих столбцов, потому что когда я отправляю несколько сообщений моему клиенту, я получаю отладочные сообщения
E/SQLiteLog﹕ (1) duplicate column name: [email protected]
Это мой отсчет, который не будет работать
public void updateView(String from) {
Cursor crs = zapp.rawQuery("SELECT * FROM Messages", null);
while (crs.moveToNext()) {
String name = crs.getString(crs.getColumnIndex(from));
messages.add(name);
}
arrayAdapter.notifyDataSetChanged();
}
Это мое исключение
06-05 22:15:45.841 4926-4926/? E/SQLiteCursor﹕ requesting column name with table name -- [email protected]
java.lang.Exception
at android.database.sqlite.SQLiteCursor.getColumnIndex(SQLiteCursor.java:180)
at org.reisacher.zapp.ChatActivity.updateView(ChatActivity.java:43)
at org.reisacher.zapp.MainActivity$1.onItemClick(MainActivity.java:52)
at android.widget.AdapterView.performItemClick(AdapterView.java:305)
at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
at android.widget.AbsListView$3.run(AbsListView.java:3860)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
06-05 22:15:45.841 4926-4926/? E/CursorWindow﹕ Failed to read row 0, column -1 from a CursorWindow which has 5 rows, 2 columns.
06-05 22:15:45.841 4926-4926/? D/AndroidRuntime﹕ Shutting down VM
06-05 22:15:45.841 4926-4926/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: org.reisacher.zapp, PID: 4926
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:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at org.reisacher.zapp.ChatActivity.updateView(ChatActivity.java:43)
at org.reisacher.zapp.MainActivity$1.onItemClick(MainActivity.java:52)
at android.widget.AdapterView.performItemClick(AdapterView.java:305)
at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
at android.widget.AbsListView$3.run(AbsListView.java:3860)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Как можно видеть, SQLite пытается получить имя столбца, который соответствует одному I я сохраняю сообщения, но как-то затем читает колонку -1
Я так и не нашел на это решение
Thanks
Вы как-то назвали один из столбцов: «[email protected]»? Возможно, по ошибке вы попытаетесь получить данные, используя это электронное письмо (/ id)? Я спрашиваю, потому что кажется, что вы вызываете метод updateView (String from) с этим адресом электронной почты в качестве параметра. [code] запрашивающее имя столбца с именем таблицы - [email protected] [cod] – MatBos