Урок 34. Хранение данных. SQLite

Обсуждение уроков
dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 16 окт 2012, 17:59

После действий с БД, необходимо обновить курсор, курсор имеет Observer, call-back метод, который запускает процесс рендеринга листа с новыми данными. Но так как вы после изменения данных в БД, не обновили курсор и не запустили механизм, то приходится удалять по позиции вручную.
Наиболее близкое к решению вопроса объяснение, но как это реализовать в коде?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 16 окт 2012, 19:04

если данные из бд удалены то они никак не могут появится с новым открытием приложения. Откройте бд из любой утилиты и посмотрите действительно ли удаляются данные? А лучше уж скиньте проект.
R.id.team
Политика на форуме запрещена

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 16 окт 2012, 20:17

Нашел вот такую. Никогда не пользовался, поэтому не знаю пойдет или нет. Посмотрите пожалуйста
http://www.sqlabs.com/sqlitemanager.php

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 16 окт 2012, 20:52

Я пользуюсь этой:
http://forum.ru-board.com/topic.cgi?forum=5&topic=36340
Находите бд в File Explorer'e Eclips'a, стягиваете её и открываете при помощи вышеупомянутой утилиты.
R.id.team
Политика на форуме запрещена

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 16 окт 2012, 20:55

У меня NetBeans. Как найти файл БД через NetBeans?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 16 окт 2012, 21:09

Что ж сказать, сочувствую =)
Придётся руками: http://www.londatiga.net/it/how-to-use- ... line-tool/
R.id.team
Политика на форуме запрещена

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 17 окт 2012, 16:54

Здравствуйте,

База данных на месте. Данные удаляются и добавляются. Если кому интересно, то решение вопроса, как я и предполагал (по совету neoksi), лежит в использовании cursor, а именно:

Код: Выделить всё

// переводим курсор в текущую позицию листа
cursor.moveToPosition((int) list_pos_ID);

// получаем ID текущей позиции от курсора
long abc = cursor.getLong(cursor.getColumnIndex(DBHelper.COLUMN_ID));
и затем, с удовольствием удаляем.

Пока разбирался, возник вопрос: следует ли при каждом обращении к базе, открывать курсор и, после ее закрытия, закрывать и курсор.

А так, тема закрыта, спасибо всем кто пытался помочь.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 17 окт 2012, 22:19

dil_android, у меня вопрос. От куда вы получаете list_pos_ID?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 18 окт 2012, 18:29

// ID текущей позиции на листе
list_pos_ID = acmi.id;

KamiSempai, подскажите пожалуйста. Сегодня пытался создать новую таблицу уже для ChildActivity и обновить базу данных. В результате LogCat выдает следующее:

Код: Выделить всё


15:17:11.884	62	system_process	WARN	ActivityManager	No content provider found for: 
15:17:12.004	62	system_process	WARN	ActivityManager	No content provider found for: 
15:17:12.445	62	system_process	INFO	ActivityManager	Force stopping package example.CustomAdapter uid=10047
15:17:14.175	62	system_process	INFO	ActivityManager	Force stopping package example.CustomAdapter uid=10047
15:17:15.485	62	system_process	INFO	ActivityManager	Force stopping package example.CustomAdapter uid=10047
15:17:21.914	62	system_process	INFO	ActivityManager	Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=example.CustomAdapter/.MainActivity } from pid 1318
15:17:22.865	62	system_process	INFO	ActivityManager	Start proc example.CustomAdapter for activity example.CustomAdapter/.MainActivity: pid=1328 uid=10047 gids={1015}
15:17:25.864	62	system_process	INFO	ActivityManager	Displayed example.CustomAdapter/.MainActivity: +3s24ms
15:17:09.954	1304	#1304	DEBUG	AndroidRuntime	>>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
15:17:09.954	1304	#1304	DEBUG	AndroidRuntime	CheckJNI is ON
15:17:11.586	1304	#1304	DEBUG	AndroidRuntime	Calling main entry com.android.commands.pm.Pm
15:17:17.666	1304	#1304	DEBUG	AndroidRuntime	Shutting down VM
15:17:17.795	1304	#1304	INFO	AndroidRuntime	NOTE: attach of thread 'Binder Thread #3' failed
15:17:19.574	1318	#1318	DEBUG	AndroidRuntime	>>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
15:17:19.574	1318	#1318	DEBUG	AndroidRuntime	CheckJNI is ON
15:17:21.717	1318	#1318	DEBUG	AndroidRuntime	Calling main entry com.android.commands.am.Am
15:17:22.194	1318	#1318	DEBUG	AndroidRuntime	Shutting down VM
15:17:22.344	1318	#1318	INFO	AndroidRuntime	NOTE: attach of thread 'Binder Thread #3' failed
15:17:11.875	312	com.android.defcontainer	DEBUG	dalvikvm	GC_EXPLICIT freed 6K, 54% free 2538K/5511K, external 716K/1038K, paused 114ms
15:17:13.964	1313	#1313	DEBUG	dalvikvm	DexOpt: load 82ms, verify+opt 292ms
15:17:14.154	62	system_process	DEBUG	dalvikvm	GC_FOR_MALLOC freed 876K, 45% free 4625K/8263K, external 1488K/1828K, paused 147ms
15:17:15.625	1291	com.android.launcher	DEBUG	dalvikvm	GC_EXPLICIT freed 10K, 50% free 2899K/5767K, external 2241K/2547K, paused 109ms
15:17:17.336	62	system_process	DEBUG	dalvikvm	GC_EXPLICIT freed 380K, 45% free 4582K/8263K, external 1488K/1828K, paused 225ms
15:17:17.604	179	android.process.acore	DEBUG	dalvikvm	GC_EXPLICIT freed 125K, 52% free 2754K/5703K, external 716K/1038K, paused 1809ms
15:17:17.795	1304	#1304	DEBUG	dalvikvm	GC_CONCURRENT freed 101K, 72% free 295K/1024K, external 0K/0K, paused 2ms+3ms
15:17:17.814	1304	#1304	DEBUG	dalvikvm	Debugger has detached; object registry had 1 entries
15:17:22.664	1318	#1318	DEBUG	dalvikvm	GC_CONCURRENT freed 102K, 69% free 320K/1024K, external 0K/0K, paused 3ms+2ms
15:17:22.664	1318	#1318	DEBUG	dalvikvm	Debugger has detached; object registry had 1 entries
15:17:26.485	322	com.svox.pico	DEBUG	dalvikvm	GC_EXPLICIT freed 1K, 55% free 2530K/5511K, external 716K/1038K, paused 4622ms
15:17:31.024	261	com.android.quicksearchbox	DEBUG	dalvikvm	GC_EXPLICIT freed 8K, 55% free 2589K/5703K, external 716K/1038K, paused 88ms
15:17:36.054	312	com.android.defcontainer	DEBUG	dalvikvm	GC_EXPLICIT freed 8K, 54% free 2535K/5511K, external 716K/1038K, paused 91ms
15:17:41.104	1291	com.android.launcher	DEBUG	dalvikvm	GC_EXPLICIT freed 56K, 49% free 2985K/5767K, external 2255K/2547K, paused 122ms
15:17:13.164	35	#35	DEBUG	installd	DexInv: --- BEGIN '/data/app/example.CustomAdapter-2.apk' ---
15:17:13.996	35	#35	DEBUG	installd	DexInv: --- END '/data/app/example.CustomAdapter-2.apk' (success) ---
15:17:14.644	35	#35	INFO	installd	move /data/dalvik-cache/data@app@example.CustomAdapter-2.apk@classes.dex -> /data/dalvik-cache/data@app@example.CustomAdapter-2.apk@classes.dex
15:17:17.554	35	#35	INFO	installd	unlink /data/dalvik-cache/data@app@example.CustomAdapter-1.apk@classes.dex
15:17:17.814	1304	#1304	DEBUG	jdwp	Got wake-up signal, bailing out of select
15:17:22.664	1318	#1318	DEBUG	jdwp	Got wake-up signal, bailing out of select
15:17:12.445	62	system_process	INFO	PackageManager	Removing non-system package:example.CustomAdapter
15:17:12.844	62	system_process	DEBUG	PackageManager	Scanning package example.CustomAdapter
15:17:12.844	62	system_process	INFO	PackageManager	Package example.CustomAdapter codePath changed from /data/app/example.CustomAdapter-1.apk to /data/app/example.CustomAdapter-2.apk; Retaining data and using new
15:17:12.864	62	system_process	INFO	PackageManager	Unpacking native libraries for /data/app/example.CustomAdapter-2.apk
15:17:13.996	62	system_process	WARN	PackageManager	Code path for pkg : example.CustomAdapter changing from /data/app/example.CustomAdapter-1.apk to /data/app/example.CustomAdapter-2.apk
15:17:14.004	62	system_process	WARN	PackageManager	Resource path for pkg : example.CustomAdapter changing from /data/app/example.CustomAdapter-1.apk to /data/app/example.CustomAdapter-2.apk
15:17:14.004	62	system_process	DEBUG	PackageManager	  Activities: example.CustomAdapter.MainActivity example.CustomAdapter.ChildActivity
15:17:14.644	62	system_process	DEBUG	PackageManager	New package installed in /data/app/example.CustomAdapter-2.apk
15:17:12.084	62	system_process	DEBUG	PackageParser	Scanning package: /data/app/vmdl-891675230.tmp
15:17:12.114	62	system_process	INFO	PackageParser	example.CustomAdapter: compat added android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_PHONE_STATE
15:17:16.294	62	system_process	WARN	RecognitionManagerService	no available voice recognition services found
Означает ли все это, что эмулятор не может найти package example.CustomAdapter, и, поэтому, создает копии пакетов по адресу:

/data/app/example.CustomAdapter-2.apk'

Что делать в этом случае?

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 18 окт 2012, 18:34

Работа приложения также отличается от того, что я делал до попытки внесения изменений в базу данных. Например, в LogCat не отображаются Logs.

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 34. Хранение данных. SQLite

Сообщение KamiSempai » 18 окт 2012, 19:41

По поводу поиска ID из базы. Не лучше ли в классе Bazar создать поле в котором записывать этот самый _ID?
А если по правильному, то нужно было использовать CursorAdapter.

Что касательно последнего вопроса. У Вас много лишней информации в логах, не могу ничего разобрать. Я бы посоветовал удалить приложение и установить его заново.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

dil_android
Сообщения: 103
Зарегистрирован: 10 сен 2012, 11:58

Re: Урок 34. Хранение данных. SQLite

Сообщение dil_android » 19 окт 2012, 18:04

Здравствуйте,

Вопрос относительно подключения к базе и использования курсора. Насколько я понял, после создания объекта для управления версиями БД new DBHelper(this) в методе onCreate(), закрытие базы данных лучше произвести в методе onDestroy(). В тоже время, курсор должен закрываться после каждого обращения с ним. Так ли это?
Связано ли сообщение close() was never explicitly called on database в LogCat с тем, что при выходе из Activity не была закрыта база в методе onDestroy()?

Спасибо.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 19 окт 2012, 23:40

ой давно я с курсорами не работал, но если память не изменяет то:1) если закрыть соединение с бд - закроется и курсор (соответственно он будет равен null); 2) в каких местах открывать и закрывать это уже на ваше усмотрение, роли не играет, просто главное следить за всем этим; 3) пока бд открыта то курсор думаю не зачем закрывать, смысла не вижу.
На счёт ошибок, лог какой то не полный, там много бреда dalvik'a который не нужен. Если падает то почему бы не пройтись дебагером и понять где падает?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 13:46

Здравствуйте! я новичок в java и Android, но мне предстоит написать довольно серьезный проект с базами данных. Я смотрела курсы (уроки) джава и андроида, чтобы иметь представление. Мне все было понятно, т.к. в каждом уроке код пишется в основном прямо в главном джава-файлике. Меня интересует следующее - как правильно строить проект, использующий базы данных - где должно что быть. Я только читала упоминание, что каждой таблице нужно создать свой класс- отдельный джава-файл. А остальное? как тут должна архитектура быть построена? куда нужно записывать переопределенный класс хэлпера, например, откуда его потом создавать? откуда должно создаваться соединение с базой данных? (у меня еще одно соединение будет с sqlserver.
Если кто-то может помочь - объясните, пожалуйста, попроще. Я попытаюсь разобраться. Не хочется сразу огород городить абы что и абы где.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение neoksi » 20 окт 2012, 14:04

Создаете контент провайдера, который держит соединение с бд, а к нему уже обращаетесь за данными.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 20 окт 2012, 14:10

Olivka
Во-первых, начните с малого. То что вы видели уроки ничего не значит. У вас нету практики, а значит вылазка в огород ничего хорошего не принесёт.
Olivka писал(а):только читала упоминание, что каждой таблице нужно создать свой класс- отдельный джава-файл.
Это не обязательно. Всё зависит от фантазии разработчика и кому как удобно.
Olivka писал(а):куда нужно записывать переопределенный класс хэлпера, например, откуда его потом создавать?
Записывать в отдельный файл. Создавать можете при старте активити, а закрывать при переходе в стоп, или же создавать при каждом обращении к бд, в общем как вам понравится.
Olivka писал(а):откуда должно создаваться соединение с базой данных? (у меня еще одно соединение будет с sqlserver).
Как у вас осуществляется соединение с sqlserver? В любом случае соединения друг другу не помешают.
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 14:35

Спасибо огромное за советы!
rezak90 писал(а): Во-первых, начните с малого. То что вы видели уроки ничего не значит. У вас нету практики, а значит вылазка в огород ничего хорошего не принесёт.
НУ и я о том же. Я начинаю не с малого, а с краю, т.к. с малого начинать некогда :)
rezak90 писал(а): Как у вас осуществляется соединение с sqlserver? В любом случае соединения друг другу не помешают.
буду использовать соединение jdbc. Читала, что его нужно где-то в эклипсе прописать. Где именно?
Задача такая (с краю). Нужно установить соединение с sqlserver и считать оттуда данные. Отобразить на экране списком. Пользователь выделяет нужные строчки. Скопировать выделенные данные в локальную таблицу БД (sqlite), предварительно ее создав. Показать на экране списком.
Для меня это уже очень сложно..
да, наверное, соединение с удаленной бд нужно создавать перед показом списка с этими данными, а закрывать сразу, как данные скопируются.. я так понимаю в событии oncreate активити - создавать, а закрывать, когда ей будет finish(), так?

Искала литературу, где было бы пошире отвещен вопрос про базы данных - ничего не нашла..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 20 окт 2012, 14:50

вы так и не ответили как осуществляется связь с sqlserver'ом. Я имел в виду по какому протоколу. По http собираетесь обращаться?
R.id.team
Политика на форуме запрещена

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 34. Хранение данных. SQLite

Сообщение Foenix » 20 окт 2012, 15:18

нет, через ODBC
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 34. Хранение данных. SQLite

Сообщение rezak90 » 20 окт 2012, 15:34

а можно не скромный вопрос? Архитектуру приложения вы придумывали или вам просто дали задание и делай как хочешь? Просто ODBC в андроиде это извращенство. Обращаться на прямую к sqlserver'y в андроиде, та и вообще в мобильных платформах не принято. Для этого дела на сервере создаётся апи, и все функции и обращения к бд на себя берёт сервер дабы не использовать ресурсы мобильного телефона. Если в самой java odbc/jdbc это ещё круто, то в андроиде это минное поле)))
Ладно, я отклонился от темы. На сколько я понял то это вам нужно будет не стандартными способами (не так как с SQLite), так как там свои java классы, а андроид не имеет своих классов для работы с jdbc/odbc.
R.id.team
Политика на форуме запрещена

Ответить