François Leclercq
соответственно, нужно на ондестрое удалять таблицу что ли?
Андрій
есть либа какая-то где прогрессбару толщину задать можно?
Konstantin
ретранслятор зависит от бизнес логики, очень путанно ее описываешь, обычно таблицы удаляют при логауте или смене юзера или вообще не удаляют. Удаление базы и таблиц не тоже самое что удалить старые записи внутри таблицы.
François Leclercq
ретранслятор зависит от бизнес логики, очень путанно ее описываешь, обычно таблицы удаляют при логауте или смене юзера или вообще не удаляют. Удаление базы и таблиц не тоже самое что удалить старые записи внутри таблицы.
так как таблица тут одна, полагаю, допустимо говорить о базе и таблице как об одном и том же. логика именно в том, чтобы кешировать данные (да, знаю что тупо, но тз писал не я). соответственно, резонно удалять данные в ondestroy, правильно?
Konstantin
очень странный переход от "кешировать данные" до "удалять данные в ondestroy"
Konstantin
зачем их вообще удалять? строй ui всегда с базы данных при старте и после обновления бд по сетке - обновляй ui тоже с бд
Konstantin
обновление таблицы - можно делать разными способами - удаление всех старых записей и запись новых либо находишь изменения и пишешь только их в таблицу
Andrey
То есть обновлять через db.update() все разы после первого?
Не знаю в чем суть твоей проблемы, ибо слишком много сообщений. 1) не нужно дропать базу, для очистки всех записей есть delete from table 2) прочитай про типы данных в SQL, их там не так много. 3) если базу нужно дополнять данными есть SQLiteDatabase.insertWithOnConflict() 4) если данные всеже нужно обновлять, добавить в таблицу ещё одну колонку, в которой будешь хранить флаг, перед обновлением делай update всей таблицы и дальше пункт 3.
Andrey
Зачем тебе вообще удалять данные?
François Leclercq
Зачем тебе вообще удалять данные?
Кроме автоинкремента нет ни одного способа проверить уникальность строки
Ivan
wat
Andrey
А зачем тебе вообще БД? Не проще ли написать класс для твоих данных и получать их при открытии приложения в массив?
Andrey
ТЗ в студию
Ivan
А если на работу возьмут нас туда всех устроят?)
François Leclercq
А если на работу возьмут нас туда всех устроят?)
Я уже не стремлюсь туда устроиться, просто хочу узнать как это делается
François Leclercq
без костылей
Ivan
без костылей правильнее использовать для этих целей другой механизм
Ivan
или другое хранилище
François Leclercq
То есть при данных вводных только с костылями? -_-
Andrey
Надо читать само задание
Andrey
На уровне SQL много что можно сделать
Konstantin
не вижу проблем и с бд без костылей, только вижу что без готового решения не получается обяснить
François Leclercq
- Использовать встроенный SQL-API для реализации кэширования
Ivan
То есть при данных вводных только с костылями? -_-
а в чем костыли? ну далаешь метод onDataReceived и там сначала удаляешь все из таблицы потом вставляешь
Ivan
нет
Anonymous
Telephony.Sms.Inbox Есть ли способ использовть для API 16?
Ivan
в чем костыль? удалил ненужные данные сохранил нужные
Ivan
все нормуль
Andrey
Данные какого плана нужно кэшировать?
Andrey
Из интернета или локальный из edittext например?
François Leclercq
из интернета
Andrey
Тогда не вижу никаких проблем
Andrey
Ondestroy вызывается всегда. Сделай вывод в logcat и посмотри что он вызывается при закрытии
Andrey
из интернета
Только строковые данные?
François Leclercq
Ondestroy вызывается всегда. Сделай вывод в logcat и посмотри что он вызывается при закрытии
Вроде при нехватке памяти жизненный цикл обходит ондестрой
Andrey
Данные из интернета прилетают все сразу или по определённым запросам?
Konstantin
то что увидишь в logcat не покрывает все случаи возможные
François Leclercq
Данные из интернета прилетают все сразу или по определённым запросам?
Прилетают пачкой. Но вот я думаю как теоретически скроллинг организовать
Andrey
Прилетают пачкой. Но вот я думаю как теоретически скроллинг организовать
И суть кэширования в этом случае какая? Если бы по элементам тут ещё можно было бы делать выборки, но если все разом, только добавить таблицу времени последнего обновления и настроить проверку текущего времени и времени кэша. Если разница больше времени хранения кэша - удаляем данные получаем новые. Либо по кнопке удалять данные таблицы.
Anonymous
Field requires API level 19 (current min is 17): `android.provider.Telephony.Sms.Inbox#CONTENT_URI Вот так можно от API 19 Cursor cur = contentResolver.query(Telephony.Sms.Inbox.CONTENT_URI, null, null, null, null); А вот так можно хоть с API 1 Uri uriSMSURI = Uri.parse("content://sms/inbox"); Cursor cur = contentResolver.query(uriSMSURI, null, null, null, null); Запустил работает на Android 3. Может мне кто объяснит? почему при добавлении класса Inbox стало возможно использовать от 19 API? Что творят эти гугловцы. Или я что - то не понимаю
Anonymous
В чем подвох?
Andrey
выборки есть в виде сортировки "по профессиям" - данные берутся из базы
Имелось ввиду выборка загрузки данных из интернета.
Ivan
я непонимаю причем тут oncreate и ondestroy
Ivan
не надо ничего усложнять
Ivan
получил новые данные заменил
Ivan
все
Ivan
нафига что-то наворачивать если нет для этого предпосылок
François Leclercq
Для этого нужно как минимум отслеживать первый запуск приложения
Ivan
накой?
Andrey
По идее, кэш нам нужен только при каждом onCreate - сопоставлять его не нужно. нужно только работать какбе в офлайне.
Загрузил данные из интернета раз в БД. Работаешь в оффлайне. Проверяешь призапуске есть ли данные в БД, если нет то запрашиваешь, если есть то сразу работаешь. Не?
François Leclercq
Ну если удаляем, то ошибки это не вызовет. но выглядит это предельно тупо. создаем таблицу. все удаляем, добавляем
Ivan
я осудил?
François Leclercq
серьезно?
Ivan
я исключительно про сам метод. выглядит уродливо как по мне
François Leclercq
Проверка курсора на больше нуля?
Ivan
ну и он не проверяет что есть база. он проверяет что есть записи в таблице
Ivan
cursor не проверил на нул
Ivan
я бы сделал boolean hasRows = cursor != null && cursor.count() >0 cursor.close(); return hasRows;
Ivan
если это нужно
Andrey
Я так использую БД. Только у меня ещё есть время хранения таблицы в 5 часов, т.к. работать приходиться в местах плохой связи. Как раз при запуске я проверяю в таблице дату последнего обновления, если есть интернет то обновляю, если нет работаю со старой базой пока интернет не появится
Ivan
а если 5 часов прошло?
Ivan
и инета нет?
Yushka
работаю со старой базой пока интернет не появится
Ivan
ну со временем жизни нужно осторожно обращаться.
Yushka
(с)
Andrey
Зачем такие сложности? Если в любом случае делается movetofirst , то и засунуть его в условие. Иначе там данных нет
Andrey
Cursor cursor =db.query(); If (cursor.movetofirst){ //offline } Else { //download }
Anonymous
Кто работал с Content Provider SMS?
Anonymous
Почему поиск происходит как стеком?