Урок 34. Хранение данных. SQLite
Re: Урок 34. Хранение данных. SQLite
Что то не совсем понятен вопрос. При загрузке первой активити открывайте бд, делайте query, получаете Cursor который в цикле прогоняете и при каждом проходе делайте product.add(new Product( ??? , R.drawable.unread)).
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Вообщем, (не) получается следующим образом. Есть метод fillData c постоянными позициями
а также метод db ShowAll с вызовом сперва метода fillData(), а затем загрузкой данных из БД
При загрузке такой конструкции дает следующую ошибку:
03:54:57.590 620 example.CustomAdapter ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{example.CustomAdapter/example.CustomAdapter.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
Спасибо.
Код: Выделить всё
// генерируем постоянные данные для адаптера
void fillData() {
product.add(new Product("Product_1 ", R.drawable.unread));
product.add(new Product("Product_1 ", R.drawable.unread));
product.add(new Product("Product_1 ", R.drawable.unread));
}
Код: Выделить всё
void dbShowAll() {
fillData();
// подключаемся к базе данных
db = dbHelper.getWritableDatabase();
// получаем значения и отображаем при загрузке приложения
c = db.query("mytable", null, null, null, null, null, null);
if (c != null) {
if (c.moveToFirst()) {
nameColIndex = c.getColumnIndex("name");
do {
String str = c.getString(nameColIndex);
product.add(new Product(str, R.drawable.unread));
} while (c.moveToNext());
}
} else {
Log.d(LOG_TAG, "Cursor is null");
c.close();
dbHelper.close();
}
}
03:54:57.590 620 example.CustomAdapter ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{example.CustomAdapter/example.CustomAdapter.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
Спасибо.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
На какой именно строке происходит исключение?dil_android писал(а):При загрузке такой конструкции дает следующую ошибку:
03:54:57.590 620 example.CustomAdapter ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{example.CustomAdapter/example.CustomAdapter.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Я даже не знаю в NetBeans LogCat строки не показывает. Может я просто не знаю как настроить.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
В эклипсе, при двойном клике по сообщению, курсор автоматически переходит на нужную строку. Скорее всего в NetBeans это тоже должно сработать.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Двойным кликом открывает только классы в android.app
Скорее всего ошибка
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString_native(Native Method)
Как добавить скриншот к моему сообщению?
Скорее всего ошибка
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString_native(Native Method)
Как добавить скриншот к моему сообщению?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime FATAL EXCEPTION: main
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{example.CustomAdapter/example.CustomAdapter.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.os.Looper.loop(Looper.java:123)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:3683)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:507)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString_native(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString(CursorWindow.java:329)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at example.CustomAdapter.MainActivity.dbShowAll(MainActivity.java:322)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at example.CustomAdapter.MainActivity.onCreate(MainActivity.java:111)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime ... 11 more
09:05:57.520 1805 example.CustomAdapter DEBUG AndroidRuntime Shutting down VM
09:05:57.520 1805 example.CustomAdapter WARN dalvikvm threadid=1: thread exiting with uncaught exception (group=0x40015560)
09:05:57.359 1805 example.CustomAdapter ERROR CursorWindow Bad request for field slot 0,-1. numRows = 2, numColumns = 3
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{example.CustomAdapter/example.CustomAdapter.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.access$1500(ActivityThread.java:117)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:99)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.os.Looper.loop(Looper.java:123)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:3683)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:507)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString_native(Native Method)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.CursorWindow.getString(CursorWindow.java:329)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at example.CustomAdapter.MainActivity.dbShowAll(MainActivity.java:322)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at example.CustomAdapter.MainActivity.onCreate(MainActivity.java:111)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
09:05:57.826 1805 example.CustomAdapter ERROR AndroidRuntime ... 11 more
09:05:57.520 1805 example.CustomAdapter DEBUG AndroidRuntime Shutting down VM
09:05:57.520 1805 example.CustomAdapter WARN dalvikvm threadid=1: thread exiting with uncaught exception (group=0x40015560)
09:05:57.359 1805 example.CustomAdapter ERROR CursorWindow Bad request for field slot 0,-1. numRows = 2, numColumns = 3
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Я мог бы отправить "свое произведение" txt файлом на личку, с Вашего позволения.
Мне кажется, посмотрев, ошибку найти было бы легче.
Мой адрес dil_android@mail.ru
Спасибо
Мне кажется, посмотрев, ошибку найти было бы легче.
Мой адрес dil_android@mail.ru
Спасибо
Re: Урок 34. Хранение данных. SQLite
почему бы дебагером не пройтись и узнать что где вылетает?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Не нужно ничего присылать. Ошибка в строке с getString. Проверьте, правильно ли Вы указали имя колонки в getColumnIndex.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Так и подмывает спросить "дяденька, а как вы это сделали"?
Если серьезно, можно расшифровку фокуса-покуса, хотя бы в общем, для расширения собственных знаний.
Весь вопрос был только в одной букве s в names.
Спасибо большое.
Если серьезно, можно расшифровку фокуса-покуса, хотя бы в общем, для расширения собственных знаний.
Весь вопрос был только в одной букве s в names.
Спасибо большое.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 34. Хранение данных. SQLite
Если читать снизу вверх можно заметить цепочку методов которая вызывает ошибку. Оибку определить можно было сразу по строке "get field slot from row 0 col -1 failed". В ней говорится, что не удалось получить поле из 0 строки -1 колонки, а у колонки индекс -1 бывает только если такой колонки не существует.dil_android писал(а):"дяденька, а как вы это сделали"?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Понял, спасибо за разъяснение. Сразу, пока не остыло, хочу спросить еще вот о чем. Как увязать id даваемое вводимым данным с id пункта списка, чтобы при удалении удалять именно ту позицию в базе данных, которую выбрал в списке.
А именно, реализовать в следующем:
Вопрос для меня важен, потому, что хочу использовать одну БД для двух списков. Насколько я понял, такое возможно, и даже приветствуется с точки зрения оптимизации. Может, существует какой-то маркер?
Спасибо.
А именно, реализовать в следующем:
Код: Выделить всё
if (item.getItemId() == CM_DELETE_ID) {
// получаем инфу о пункте списка
AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
// подключаемся к базе данных
db = dbHelper.getWritableDatabase();
if (c != null) {
//удаление текущей позиции из базы данных
Log.d(LOG_TAG, "--- Delete from mytabe: ---");
// удаляем
int delCount = db.delete("mytable", "id = " + acmi.id, null); ????
Log.d(LOG_TAG, "row deleted, ID = " + rowID);
Log.d(LOG_TAG, "MainActivity deleted row, ID = " + acmi.id);
Log.d(LOG_TAG, "deleted rows count = " + delCount);
} else {
Log.d(LOG_TAG, "Cursor is null");
c.close();
}
dbHelper.close();
// уведомляем, что данные изменились
myAdapter.notifyDataSetChanged();
return true;
Спасибо.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
Здравствуйте,
Провозившись весь день, пришел к выводу, что в принципе делаю что-то не верно. Взяв за основу пример из Урока 54, где создается свой адаптер на основе BaseAdapter, а данные загружаются из ArrayList<Product>, я хочу включить в свою программу базу данных SQLite, в которую закладываю получаемые из вне значения, и, через которую product.add(new Product(names, R.drawable.unread));стараюсь пополнить ArrayList<Product>.
Отсюда, предыдущий вопрос о возможности синхронизации id данных.
Подскажите пожалуйста, прав ли я в своих сомнениях?
Провозившись весь день, пришел к выводу, что в принципе делаю что-то не верно. Взяв за основу пример из Урока 54, где создается свой адаптер на основе BaseAdapter, а данные загружаются из ArrayList<Product>, я хочу включить в свою программу базу данных SQLite, в которую закладываю получаемые из вне значения, и, через которую product.add(new Product(names, R.drawable.unread));стараюсь пополнить ArrayList<Product>.
Отсюда, предыдущий вопрос о возможности синхронизации id данных.
Подскажите пожалуйста, прав ли я в своих сомнениях?
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
В дополнение. Обращение к SQLite было вызвано желанием сохранять все вновь вводимые данные с тем, чтобы они отображались при каждой новой загрузке, т.е., чтобы программа была динамичной. Когда пытался сделать это через Prefrences не получилось. Подскажите как быть, а то чувствую, что путаюсь.
Re: Урок 34. Хранение данных. SQLite
вы путаетесь, и я вместе с вами))) И так в чём собственно проблема? Запустилась приложуха, вытянули из бд данные, заполнили ими listview. Что именно не понятно?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 34. Хранение данных. SQLite
Тебе вроде бы надо этоdil_android писал(а):Понял, спасибо за разъяснение. Сразу, пока не остыло, хочу спросить еще вот о чем. Как увязать id даваемое вводимым данным с id пункта списка, чтобы при удалении удалять именно ту позицию в базе данных, которую выбрал в списке.
А именно, реализовать в следующем:
Вопрос для меня важен, потому, что хочу использовать одну БД для двух списков. Насколько я понял, такое возможно, и даже приветствуется с точки зрения оптимизации. Может, существует какой-то маркер?Код: Выделить всё
if (item.getItemId() == CM_DELETE_ID) { // получаем инфу о пункте списка AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); // подключаемся к базе данных db = dbHelper.getWritableDatabase(); if (c != null) { //удаление текущей позиции из базы данных Log.d(LOG_TAG, "--- Delete from mytabe: ---"); // удаляем int delCount = db.delete("mytable", "id = " + acmi.id, null); ???? Log.d(LOG_TAG, "row deleted, ID = " + rowID); Log.d(LOG_TAG, "MainActivity deleted row, ID = " + acmi.id); Log.d(LOG_TAG, "deleted rows count = " + delCount); } else { Log.d(LOG_TAG, "Cursor is null"); c.close(); } dbHelper.close(); // уведомляем, что данные изменились myAdapter.notifyDataSetChanged(); return true;
Спасибо.
viewtopic.php?f=34&t=1120
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
rezak90
Спасибо за желание помочь. Чтобы не загромождать своими объяснениями форум, я скинул Вам на личку.
Спасибо за желание помочь. Чтобы не загромождать своими объяснениями форум, я скинул Вам на личку.
-
- Сообщения: 103
- Зарегистрирован: 10 сен 2012, 11:58
Re: Урок 34. Хранение данных. SQLite
to powercat
Сейчас у меня на повестке два основных вопроса, решение которых позволит запустить приложение - это передача данных с Activity и динамическое обновление списка, сохраняя и удаляя в БД. Спасибо за ссылку, но надо сперва разобраться с БД. У меня такое ощущение, что делают что-то не так, именно с точки зрения логики программирования. К сожалению нет возможности обратиться к кому-либо с просьбой посмотреть код, кроме как к участникам этого форума. Любая помощь, и особенно критика, будут восприняты с благодарностью.
Еще раз спасибо.
Сейчас у меня на повестке два основных вопроса, решение которых позволит запустить приложение - это передача данных с Activity и динамическое обновление списка, сохраняя и удаляя в БД. Спасибо за ссылку, но надо сперва разобраться с БД. У меня такое ощущение, что делают что-то не так, именно с точки зрения логики программирования. К сожалению нет возможности обратиться к кому-либо с просьбой посмотреть код, кроме как к участникам этого форума. Любая помощь, и особенно критика, будут восприняты с благодарностью.
Еще раз спасибо.
Re: Урок 34. Хранение данных. SQLite
я так понял, что ты хочешь удалить пункт списка, чтобы при этом произошло удаление по id в базе и перепостроение списка?
Если так, то моя ссыль - именно это решение, у меня была именно эта проблема.
А код...ну запость сюда все коды...думаю, народ поймет...
Если так, то моя ссыль - именно это решение, у меня была именно эта проблема.
А код...ну запость сюда все коды...думаю, народ поймет...