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

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

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

Сообщение Foenix » 22 окт 2012, 19:48

rezak90 писал(а):Первый раз вижу что бы начальство диктовало разработчику как делать. Разработчик делает то что требует заказчик, а то как это сделать он решает сам лично, ведь ему делать а не началству. Начальство лишь должно удостоверится что вы не лепите велосипед.
Опять от темы отклонились. Ну так что получилось уже что то или нет?
не работает моя придумка на 4.0, ошибку выдает
10-22 16:42:24.831: E/AndroidRuntime(551): FATAL EXCEPTION: main
10-22 16:42:24.831: E/AndroidRuntime(551): android.os.NetworkOnMainThreadException
10-22 16:42:24.831: E/AndroidRuntime(551): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.InetAddress.getAllByName(InetAddress.java:220)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.Socket.tryAllAddresses(Socket.java:108)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.Socket.<init>(Socket.java:177)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.net.Socket.<init>(Socket.java:149)
10-22 16:42:24.831: E/AndroidRuntime(551): at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:263)
10-22 16:42:24.831: E/AndroidRuntime(551): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:318)
10-22 16:42:24.831: E/AndroidRuntime(551): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.sql.DriverManager.getConnection(DriverManager.java:175)
10-22 16:42:24.831: E/AndroidRuntime(551): at java.sql.DriverManager.getConnection(DriverManager.java:209)
...
может у кого-то мысли будут что делать.. :(
код из потока (сделала простейший, без раннабла)

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

ThGetFirm Thr = new ThGetFirm();
Thr.run();
А это в потоке

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

try {
	            System.out.println("Пытаюсь соединиться с БД!");
	            conn = DriverManager.getConnection(
	                    "jdbc:jtds:sqlserver://localhost:1433/baza",
	                    "user", "psw");
	            if (conn == null) {
	                System.out.println("Нет соединения с БД!");
	                System.exit(0);
	            } else {
	                System.out.println("connected");
	            }
	        } catch (java.sql.SQLException e) {
	            e.printStackTrace();
	        }
Последний раз редактировалось Foenix 22 окт 2012, 21:45, всего редактировалось 1 раз.
R.id.team

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

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

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

Сообщение Foenix » 22 окт 2012, 19:52

Видимо, я не так как-то поток делаю!
NetworkOnMainThreadException - это прямо и гвооиртся тут
http://developer.android.com/reference/ ... ption.html
Направьте, плиз, по нужному пути..
R.id.team

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

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

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

Сообщение KamiSempai » 22 окт 2012, 20:00

Потоки обычно запускаются методом start(), а у Вас run(). Может в этом проблема?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

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

Сообщение Foenix » 22 окт 2012, 20:06

на 2.1 как-то работает :)
потоки разные бывают, у меня простейший. Может ему надо приоритет назначить..
R.id.team

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

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

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

Сообщение KamiSempai » 22 окт 2012, 20:21

Приоритет тут не причем. Вы неправильно запускаете поток. Нужно через start.
Кстати, тут будет удобно использовать AsyncTask. Классная вещь :)
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

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

Сообщение Foenix » 22 окт 2012, 21:34

не успеваю спасибы раздавать..
получилось! спасибо!!
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 » 22 окт 2012, 23:18

KamiSempai писал(а):Приоритет тут не причем. Вы неправильно запускаете поток. Нужно через start.
Кстати, тут будет удобно использовать AsyncTask. Классная вещь :)
Кстати, в своё время не разобрался с первого захода с AsyncTask, а именно, как из него отправлять данные в UI поток по мере выполнения в бэкграунде операций. Тогда все реализовал через стандартный поток и хендлы, но сейчас бы не отказался от ссылки на хорошую статью по AsyncTask с примером.

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

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

Сообщение Foenix » 22 окт 2012, 23:23

neoksi писал(а): Кстати, в своё время не разобрался с первого захода с AsyncTask, а именно, как из него отправлять данные в UI поток по мере выполнения в бэкграунде операций. Тогда все реализовал через стандартный поток и хендлы, но сейчас бы не отказался от ссылки на хорошую статью по AsyncTask с примером.
сейчас я вам покажу..
http://www.ibm.com/developerworks/ru/li ... etandroid/
там с примером..
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 » 23 окт 2012, 04:57

Olivka писал(а):
neoksi писал(а): Кстати, в своё время не разобрался с первого захода с AsyncTask, а именно, как из него отправлять данные в UI поток по мере выполнения в бэкграунде операций. Тогда все реализовал через стандартный поток и хендлы, но сейчас бы не отказался от ссылки на хорошую статью по AsyncTask с примером.
сейчас я вам покажу..
http://www.ibm.com/developerworks/ru/li ... etandroid/
там с примером..
Спасибо, честно статейка перегружена лишними данными, но это меня сподвигло разобраться ещё раз и вспомнить в чем был основной вопрос к AsyncTask. Во всех статьях умалчивается об использовании внутри переопределяемых методов varargs (эти злобные три точки ;) ), обычно дано как данность. Поняв что такое varargs, я понял, какой мощный однако AsyncTask.

П.С. Но в моем случае использование Хендлера оказывается более оправданным, так как при авторизации слишком много разных вариантов отклика UI.

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

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

Сообщение Foenix » 23 окт 2012, 21:23

Подскажите дальше, пожалуйста. Поток у меня получается возвращает ResultSet, который я потом отображать буду. Так вот где нужно описать этот ResultSet? можно ли его из потока изменять? И что означают строчки в Tomcat, я так понимаю это во время выполнения запроса что-то происходит, какие-то отчеты..
10-23 17:57:17.780: D/dalvikvm(1294): GC_CONCURRENT freed 452K, 6% free 10387K/10951K, paused 18ms+22ms
10-23 17:57:18.890: D/dalvikvm(1294): GC_CONCURRENT freed 451K, 6% free 10400K/10951K, paused 14ms+15ms
10-23 17:57:19.882: D/dalvikvm(1294): GC_CONCURRENT freed 469K, 6% free 10370K/10951K, paused 22ms+14ms
10-23 17:57:21.040: D/dalvikvm(1294): GC_CONCURRENT freed 441K, 6% free 10395K/10951K, paused 5ms+26ms
10-23 17:57:22.122: D/dalvikvm(1294): GC_CONCURRENT freed 450K, 6% free 10383K/10951K, paused 23ms+15ms
R.id.team

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

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

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

Сообщение AndreyI » 23 окт 2012, 21:30

GC это garbage collector - сборщик мусора, он уничтожает неиспользуемые объекты (не имеющие ссылок), в общем расчищает память, это нормально. В отчете показывает данные о свободной и используемой памяти и результаты своего труда )

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

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

Сообщение Foenix » 23 окт 2012, 21:41

Спасибо, с этим понятно!
А про ResultSet кто-нибудь знает..?
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 » 23 окт 2012, 22:28

Olivka писал(а):Спасибо, с этим понятно!
А про ResultSet кто-нибудь знает..?
У него полно get-методов которые возвратят необходимые данные. В цикл загоняете и вытягиваете всё что нужно.
http://dmivic.chat.ru/JDBC/resultset.doc.html
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 23 окт 2012, 22:33

да не.. ссылка хорошая
я хочу узнать где мне его определить? Может типа в конструктор нужно его записать (передать ссылку как параметр в поток? а потом ею пользоваться? это ведь ссылка да?
А сейчса я в потоке пишу просто

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

ResultSet rs = st.executeQuery(queryString);
Но ведь оно не из потока это rs доступно уже не будет? так ведь?
Вот я и спрашиваю где мне нужно это описывать..

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

ResultSet rs;
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 » 23 окт 2012, 23:06

Ну смотря какой поток используете. Если AsyncTask то он может возвращать данные как обычный метод. Если же какой то другой то сделайте ResultSet как static переменную.
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 23 окт 2012, 23:07

А где? в мэйне же нельзя ничего менять-то из потока?
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 » 23 окт 2012, 23:35

если переменная объявлена как public static то видна с любого места в приложении, но это делается в крайних случая, лучше же всё таки сделайте AsyncTask с возвратом.
R.id.team
Политика на форуме запрещена

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

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

Сообщение Foenix » 25 окт 2012, 11:37

ой, вчера я ее объявила в мэйне все-таки (переделаю потом), скрипя зубами, т.к. мне не нравится делать "пришлепки", уж на это так эклипс реагировал плохо - приложение закрывалось сразу после запуска. Я долго искала причину, почему ему не нравится это объявление переменной в самом начале (другой причины не видела), но так и не поняала, т.к. моежт это глюк какой-то был, все у меня запустилось и показалось на экран.
Я уже после своих мучений считаю это чудом неземным, боюсь все трогать))
сегодня буду дальше продолжать, теперь уже пробовать это дело запихивать в SQlite и придерживаться темы))))
R.id.team

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

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

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

Сообщение Foenix » 28 окт 2012, 12:10

Не могу понять, возник вопрос.
Во всех примерах (и в уроке в т.ч.) фигурирует понятие "имя базы данных", т.е. тут были куски кода и в интернете тоже находила - вначале даже задаются константы - имя таблицы, имена полей и имя базы данных, которое потом, впрочем, нигде не используется. Но ведь база данных должна иметь имя? как понять, в какой базе данных мы создаем таблицу?
у меня встал вопрос - создавать вторую таблицу. Хочу сделать новый класс, но что туда вносить? как же параметр - новая версия базы данных.. там тоже что ли отдельно сделать - т.е. иметь версию для каждой таблицы?
А если имени БД нет и не фигурирует, то значит, что на все приложение будет одна БД, так? Как же тогда файл БД называется? (я так и не смогла посмотреь его через File Explorer, т.к. он у меня почему-то пустой, как и окошко Devices).
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 » 28 окт 2012, 12:22

ну как это не нужны имя бд и таблиц? мы же когда подключаемся к бд то указываем её имя, когда делаем какие то запросы то указываем к какой таблице собираемся обратиться.
Если не смогли достучаться до эмулятора File Exlporer'ом то попробуйте через командную строку зайти в андроид.
R.id.team
Политика на форуме запрещена

Ответить