Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 26 июн 2019, 21:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 166 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.
Автор Сообщение
СообщениеДобавлено: 27 янв 2015, 03:19 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 176 раз.
rustech писал(а):
Правильно понимаю, что строки кода

Код: [ Загрузить ] [ Скрыть ]
  1. if (id.equalsIgnoreCase("")) { 
  2. break; 

в case R.id.btnUpd: и case R.id.btnDel влияют только на то, что в логах не выводится запись об обновлении или удалении записи? Или там какой-то более глубокий смысл?


Они обновляют\удаляют записи. Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 янв 2015, 11:35 

Зарегистрирован: 20 янв 2015, 12:27
Сообщений: 9
Откуда: Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
doter.ua писал(а):
Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).

Да, но зачем проверяется то, что ничего не заполнено? Чтобы не выводить запись в лог и не выполнять обработчик, если поле пустое?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 янв 2015, 11:48 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 176 раз.
rustech писал(а):
doter.ua писал(а):
Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).

Да, но зачем проверяется то, что ничего не заполнено? Чтобы не выводить запись в лог и не выполнять обработчик, если поле пустое?


Код: [ Загрузить ] [ Скрыть ]
  1. case R.id.btnUpd: 
  2.       if (id.equalsIgnoreCase("")) { 
  3.         break; 
  4.       } 
  5.       Log.d(LOG_TAG, "--- Update mytabe: ---"); 
  6.       // подготовим значения для обновления 
  7.       cv.put("name", name); 
  8.       cv.put("email", email); 
  9.       // обновляем по id 
  10.       int updCount = db.update("mytable", cv, "id = ?", 
  11.           new String[] { id }); 
  12.       Log.d(LOG_TAG, "updated rows count = " + updCount); 
  13.       break; 

Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 янв 2015, 02:25 

Зарегистрирован: 20 янв 2015, 12:27
Сообщений: 9
Откуда: Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
doter.ua писал(а):
Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.

Да я не об этом :)
Разобрался. Еще удалить этот код (проверку на пустое значение id)
Код: [ Загрузить ] [ Скрыть ]
  1. if (id.equalsIgnoreCase("")) { 
  2.                     break; 
  3.                 } 

то при нажатии на кнопку update и при пустом поле id программа выполнит действия с таблицей базы данных, но ничего в ней не изменит и в логи выведет сообщение
Код: [ Загрузить ] [ Скрыть ]
  1. --- Update mytabe: --- 
  2. updated rows count = 0 

Т.е., сделал я для себя вывод, проверка на пустое значение id нужна для того, чтобы не лишний раз запускать процесс работы с таблицей базы данных, оптимизировав тем самым работу приложения.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 янв 2015, 02:58 

Зарегистрирован: 20 янв 2015, 12:27
Сообщений: 9
Откуда: Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
lstaticl писал(а):
Если указать в поле id не цифры, а буквы, или float число - приложение упадет.

Проверял, действительно так.
lstaticl писал(а):
А в целом по теории работы с БД, осуществляя выборку по ID или иные действия по ID - нужно приводить переменную к INT и после проверять на 0. Тогда не надо проверять на пустоту, и нет возможности для Injection. :)

Если вышесказанное корректно, буду признателен, если чуть подробнее объясните, как реализовывается проверка на ноль. Приведение переменной к int, насколько понял, так:
Код: [ Загрузить ] [ Скрыть ]
  1.         String id = etID.getText().toString(); 
  2.         int idInt = Integer.parseInt(id); 


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 янв 2015, 11:51 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 176 раз.
rustech писал(а):
doter.ua писал(а):
Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.

Да я не об этом :)
Разобрался. Еще удалить этот код (проверку на пустое значение id)
Код: [ Загрузить ] [ Скрыть ]
  1. if (id.equalsIgnoreCase("")) { 
  2.                     break; 
  3.                 } 

то при нажатии на кнопку update и при пустом поле id программа выполнит действия с таблицей базы данных, но ничего в ней не изменит и в логи выведет сообщение
Код: [ Загрузить ] [ Скрыть ]
  1. --- Update mytabe: --- 
  2. updated rows count = 0 

Т.е., сделал я для себя вывод, проверка на пустое значение id нужна для того, чтобы не лишний раз запускать процесс работы с таблицей базы данных, оптимизировав тем самым работу приложения.

Ничего ты не понял. перечитай код еще раз.

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 30 янв 2015, 08:22 

Зарегистрирован: 20 янв 2015, 12:27
Сообщений: 9
Откуда: Москва
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
doter.ua писал(а):
Ничего ты не понял. перечитай код еще раз.

Спасибо :D


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2015, 17:34 

Зарегистрирован: 09 фев 2015, 17:27
Сообщений: 5
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
can't resolve symbol id, почему?

Код: [ Загрузить ] [ Скрыть ]
  1.  
  2.         case R.id.btnUpdate: 
  3.                 if (id.equalsIgnoreCase("")){ 
  4.                     break; 
  5.                 } 
  6.                 Log.d(LOG_TAG, "---Update mytable---"); 
  7.  
  8.                 cv.put("name", name); 
  9.                 cv.put("email", email); 
  10.  
  11.                 int updCount = db.update("mytable", cv, "id = ?", 
  12.                         new String[] { id }); 
  13.                 Log.d(LOG_TAG, "upatet rows count = " +updCount); 
  14.                 break; 
  15.             case R.id.btnDel: 
  16.                 if (id.equalsIgnoreCase("")){ 
  17.                     break; 
  18.                 } 
  19.                 Log.d(LOG_TAG, "---Deleted from mytable---"); 
  20.  
  21.                 int delCount = db.delete("mytable", "id = " + id, null); 
  22.                 Log.d(LOG_TAG, "deleted rows count =" + delCount); 
  23.                 break; 
  24.  


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 фев 2015, 16:43 

Зарегистрирован: 03 сен 2013, 14:26
Сообщений: 31
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Чисто просто из интереса. Можно или нет редактировать, удалять строку напрямую по позиции курсора.
Или только стандартный подход. Зная позицию курсора, надо вытащить ID строки, и уже по ID совершать действия.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 фев 2015, 17:53 

Зарегистрирован: 03 сен 2013, 14:26
Сообщений: 31
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Блин ПОМОЖИТЕ. Тормозю интенсивно. Все есть осталось правильно написать запрос на обновление, не доходит до мну никак. :evil:
Код: [ Загрузить ] [ Скрыть ]
  1.                        int idRecordColIndex=cur.getColumnIndex("_id"); 
  2.             int idRecord=cur.getInt(idRecordColIndex);//вытаскиваем ID записи 
  3.             //заполняем контейнер записями которые нужно изменить 
  4.             cv.put("engWord", etEngWord.getText().toString());// 
  5.             cv.put("rusWord", etRusWord.getText().toString());// 
  6.             cv.put("association", etAssociation.getText().toString());// 
  7.             if(cbVisible.isChecked()){ 
  8.                 cv.put("visible", "yes"); 
  9.             } 
  10.             else { 
  11.                 cv.put("visible", "no"); 
  12.             } 
  13.             //как правильно выполнить запрос на обновление 
  14.             db.update("dictonary", cv, null,  null); 


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 фев 2015, 12:36 

Зарегистрирован: 03 сен 2013, 14:26
Сообщений: 31
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Отвечаю сам себе. Может кому пригодится.
Код: [ Загрузить ] [ Скрыть ]
  1. int idRecordColIndex=cur.getColumnIndex("_id"); 
  2.             int idRecord=cur.getInt(idRecordColIndex);//вытаскиваем ID записи 
  3.             //заполняем контейнер записями которые нужно изменить 
  4.             cv.put("engWord", etEngWord.getText().toString());// 
  5.             cv.put("rusWord", etRusWord.getText().toString());// 
  6.             cv.put("association", etAssociation.getText().toString());// 
  7.             if(cbVisible.isChecked()){ 
  8.                 cv.put("visible", "yes"); 
  9.             } 
  10.             else { 
  11.                 cv.put("visible", "no"); 
  12.             } 
  13.             //как правильно выполнить запрос на обновление 
  14.             Log.d(MY_LOG, " ID строки которорую нужно изменить  = "+ idRecord); 
  15.             db.update("dictonary", cv, "_id=?",  new String[] { String.valueOf(idRecord)}); 

В моей голове никак не укладывалось, что значение _id в таблице имеет тип int, а запросе надо передавать строковое значение. Определенно надо почитать что то по SQL для чайников.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 фев 2015, 17:20 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
Чуть чуть не в тему, но хочу отметить, что это такая субд, в которой что int, что String - ты в столбец таблицы можешь что угодно записать - она не заругается. И второе - типы данных sqlite сильно ограничены в разнообразии. Есть только integer, real,text и blob

_________________
R.id.team

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 01 мар 2015, 06:25 

Зарегистрирован: 03 сен 2013, 14:26
Сообщений: 31
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Foenix писал(а):
Чуть чуть не в тему, но хочу отметить, что это такая субд, в которой что int, что String - ты в столбец таблицы можешь что угодно записать - она не заругается. И второе - типы данных sqlite сильно ограничены в разнообразии. Есть только integer, real,text и blob

Посоветуйте плз. Что можно почитать по SQL ну совсем для чайничков, не одаренных интелектом. Желательно чтобы картинок было побольше. :idea:


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 май 2015, 13:06 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
1 не сохранился. Это всего лишь число. На память не влияет. Не гарантировано что не будет вставлено ещё раз 1
2 БД сама по себе. Активити сами по себе.БД хэлпер отдельный класс сам по себе. Он создаёт базу. Для доступа используйте контент провайдер

_________________
R.id.team

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 май 2015, 14:54 

Зарегистрирован: 29 апр 2015, 09:47
Сообщений: 9
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вот такие вот 2 вопроса:
1) Представим что я добавил запись в таблицу, она получила id=1. После удаления этой записи из таблицы (то есть после нажатия кнопки Delete),первая запись удалилась, добавляю другую запись. После считываю то что есть в таблице, а есть там только вторая запись под id =2. Вопрос в том почему первой записи больше не существует, а ее id сохранился где-то в памяти и последующие записи уже никогда не получат id=1 даже если все предыдущие записи будут удалены. Это ведь повлияет на то как постепенно приложение будет откусывать все больше памяти системы себе?

2) Можно каким-нибудь образом создать базу данных в одном активити, а содержимое читать в другом?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 май 2015, 15:43 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
ответила же. Что не ясно?

_________________
R.id.team

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 10 июл 2015, 22:24 

Зарегистрирован: 06 июн 2015, 13:47
Сообщений: 7
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Кто-нибудь знает, куда сохраняются файлы с записями БД или Shared Preferences при работе с эмулятором Genymotion? Я нашел только общий файл с логами.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 июл 2015, 02:12 
Аватар пользователя

Зарегистрирован: 20 окт 2012, 12:01
Сообщений: 4201
Благодарил (а): 68 раз.
Поблагодарили: 467 раз.
знаем ;)

_________________
R.id.team

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 июл 2015, 08:30 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 176 раз.
dmitry_n писал(а):
Кто-нибудь знает, куда сохраняются файлы с записями БД или Shared Preferences при работе с эмулятором Genymotion? Я нашел только общий файл с логами.

http://stackoverflow.com/a/20336819

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 июл 2015, 23:05 

Зарегистрирован: 16 июл 2015, 23:00
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
"Обратите внимание, что условия и для update и для delete у меня одинаковые, а именно id = значение из поля etID. Но реализовал я их немного по-разному. Для update использовал символ ? в строке условия и массив аргументов. А для delete вставил значение сразу в строку условия. Таким образом, я просто показал способы формирования условия. А вы уже используйте тот, что больше нравится или лучше в конкретной ситуации."
Первый способ ( id = значение из поля etID) подходит только для Integer значений. Если таким способом передать String то будет ошибка NoSuchColumnExcaption :
http://stackoverflow.com/questions/1682 ... uch-column


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 166 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB