François Leclercq
соответственно, нужно на ондестрое удалять таблицу что ли?
Андрій
есть либа какая-то где прогрессбару толщину задать можно?
Konstantin
ретранслятор зависит от бизнес логики, очень путанно ее описываешь, обычно таблицы удаляют при логауте или смене юзера или вообще не удаляют. Удаление базы и таблиц не тоже самое что удалить старые записи внутри таблицы.
Konstantin
очень странный переход от "кешировать данные" до "удалять данные в ondestroy"
Konstantin
зачем их вообще удалять? строй ui всегда с базы данных при старте и после обновления бд по сетке - обновляй ui тоже с бд
Konstantin
обновление таблицы - можно делать разными способами - удаление всех старых записей и запись новых либо находишь изменения и пишешь только их в таблицу
François Leclercq
Andrey
То есть обновлять через db.update() все разы после первого?
Не знаю в чем суть твоей проблемы, ибо слишком много сообщений.
1) не нужно дропать базу, для очистки всех записей есть delete from table
2) прочитай про типы данных в SQL, их там не так много.
3) если базу нужно дополнять данными есть SQLiteDatabase.insertWithOnConflict()
4) если данные всеже нужно обновлять, добавить в таблицу ещё одну колонку, в которой будешь хранить флаг, перед обновлением делай update всей таблицы и дальше пункт 3.
François Leclercq
Не знаю в чем суть твоей проблемы, ибо слишком много сообщений.
1) не нужно дропать базу, для очистки всех записей есть delete from table
2) прочитай про типы данных в SQL, их там не так много.
3) если базу нужно дополнять данными есть SQLiteDatabase.insertWithOnConflict()
4) если данные всеже нужно обновлять, добавить в таблицу ещё одну колонку, в которой будешь хранить флаг, перед обновлением делай update всей таблицы и дальше пункт 3.
Проблема в том что мне нужно удалять либо в onDestroy (который может и не вызваться, насколько я помню), либо в onCreate : но тогда будет типа CREATE x delete * from x, что даже мне, человеку не знакомому с бд кажется полным бредом
Andrey
Зачем тебе вообще удалять данные?
Ivan
wat
Andrey
А зачем тебе вообще БД? Не проще ли написать класс для твоих данных и получать их при открытии приложения в массив?
François Leclercq
Andrey
ТЗ в студию
Ivan
А если на работу возьмут нас туда всех устроят?)
François Leclercq
без костылей
Ivan
без костылей правильнее использовать для этих целей другой механизм
Ivan
или другое хранилище
François Leclercq
То есть при данных вводных только с костылями? -_-
Andrey
Надо читать само задание
Andrey
На уровне SQL много что можно сделать
Konstantin
не вижу проблем и с бд без костылей, только вижу что без готового решения не получается обяснить
Ivan
François Leclercq
- Использовать встроенный SQL-API для реализации кэширования
François Leclercq
Ivan
нет
Anonymous
Telephony.Sms.Inbox Есть ли способ использовть для API 16?
Ivan
в чем костыль? удалил ненужные данные сохранил нужные
Ivan
все нормуль
Andrey
Данные какого плана нужно кэшировать?
Andrey
Из интернета или локальный из edittext например?
François Leclercq
из интернета
Andrey
Тогда не вижу никаких проблем
Andrey
Ondestroy вызывается всегда. Сделай вывод в logcat и посмотри что он вызывается при закрытии
François Leclercq
François Leclercq
Andrey
Andrey
Данные из интернета прилетают все сразу или по определённым запросам?
Konstantin
то что увидишь в logcat не покрывает все случаи возможные
Andrey
Прилетают пачкой. Но вот я думаю как теоретически скроллинг организовать
И суть кэширования в этом случае какая? Если бы по элементам тут ещё можно было бы делать выборки, но если все разом, только добавить таблицу времени последнего обновления и настроить проверку текущего времени и времени кэша. Если разница больше времени хранения кэша - удаляем данные получаем новые. Либо по кнопке удалять данные таблицы.
François Leclercq
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
В чем подвох?
François Leclercq
Andrey
Ivan
я непонимаю причем тут oncreate и ondestroy
Andrey
Ivan
не надо ничего усложнять
Ivan
получил новые данные заменил
Ivan
все
Ivan
нафига что-то наворачивать если нет для этого предпосылок
François Leclercq
Для этого нужно как минимум отслеживать первый запуск приложения
Ivan
накой?
François Leclercq
Ну если удаляем, то ошибки это не вызовет. но выглядит это предельно тупо. создаем таблицу. все удаляем, добавляем
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
Почему поиск происходит как стеком?