Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Vladimir93
53 / 54 / 8
Регистрация: 28.06.2015
Сообщений: 229
#1

Обновление данных один раз в сутки - Программирование Android

28.06.2015, 12:32. Просмотров 610. Ответов 11
Метки нет (Все метки)

Здравствуйте, участники форума. Чувствую что объяснить будет не просто, но я буду стараться.
Суть - конвертер валют, загружает курсы с сайта ЦБ РФ.
Курсы обновляться в 11-30 - 12-00, каждый день.
Требуется - загружать оные только один раз, в сутки.
Т.е. запускаем приложение, первым делом пробуем загрузить курсы с сайта. Тут все просто грузим, сохраняем в SharedPreferences.
И при последующих запусках уже не лезем на сайт а берем из - SharedPreferences.
А вот дальше, с обновлением, у меня возникают затруднения.
Я могу сделать так, что бы автоматически загружать новые курсы при наступлении новых суток (сверяем предыдущую дату и текущую). Но это не подходит, ибо 9 часов утра, это уже новые сутки, а курсы на сайте еще старые.
Т.е. нужно заморачваться с часами, но и тут проблема. Как установиться это самое время в часах?
Если ставить конкретное, то если пользователь не включит приложение допустим с 10 до 12 он не загрузит новые курсы. Если ставить до обеда, или после, то все это время приложение лезет в сеть и пробует обновиться. Теряем смысл сохранения курсов.
Сверять курсы, тоже бесполезно, ибо требуется загрузка актуальных. Опять же теряется смысл сохранения.
Вроде как мог пояснил, знаю трудно бывает понят что пишут. Я буду статься пояснять по ходу обсуждения, если таковое возникнет.))
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2015, 12:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обновление данных один раз в сутки (Программирование Android):

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

Почему этот цикл выполняется один раз?
Canvas, прорисовав один раз все изображения, останавливается, а задача в том...

OnTouch MotionEvent в андроид выполняется только один раз
Так вот сам вопрос: MotionEvent.ACTION_UP выполняется только первый раз, что...

Как определить, платил ли пользователь хоть один раз?
Как можно получить true или false, платил ли юзер хоть раз со своего аккаунта в...

Загрузить данные один раз с MySQL таблицы в память приложения, и в дальнейшем использовать ее
Всем добрый вечер, Есть ли возможность загрузить данные один раз с MYSQL...

Как создать layout, который запускается один раз, при первом запуске приложения?
Как создать layout, который запускается один раз, при первом запуске...

11
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
28.06.2015, 20:19 #2
Ничо не понял, но отвечу. Делай сервис и AlarmManager. Сервис сам будет ходить на сайт и качать курсы. Частоту обновления можно установить любую.
0
lvlkoo
.NET C#,ASP.NET MVC
413 / 371 / 174
Регистрация: 16.10.2010
Сообщений: 1,540
Завершенные тесты: 2
28.06.2015, 22:04 #3
Ну подождите. Вы залезли на сайт, выкачали курсы, записали дату выгрузги. При следующем запуске проверяете, что новый день и время больше 12.00. Или у вас виджет?
0
Vladimir93
53 / 54 / 8
Регистрация: 28.06.2015
Сообщений: 229
30.06.2015, 09:50  [ТС] #4
Цитата Сообщение от Rube Посмотреть сообщение
Делай сервис и AlarmManager. Сервис сам будет ходить на сайт и качать курсы. Частоту обновления можно установить любую.
Теряем смысл сохранения, в том то и суть - не грузить постоянно данные из сети, задача - обновление 1 раз в сутки, причем без предварительной загрузки. А сервис, это еще и расход ресурсов, для простого конвертера - непростительная роскошь.
Цитата Сообщение от lvlkoo Посмотреть сообщение
При следующем запуске проверяете, что новый день и время больше 12.00.
Именно так я и делал, но возникает проблема, приложение после 12 начинает обновляться при каждом включении.
Нужно еще какое то дополнительное условие. Т.е. если приложение запущено после 12 нужно проверить, обновлено ли оно, и если да, то больше не обновлять, а если нет - обновить. Вот тут у меня и проблема. Не знаю как это реализовать.
0
lvlkoo
.NET C#,ASP.NET MVC
413 / 371 / 174
Регистрация: 16.10.2010
Сообщений: 1,540
Завершенные тесты: 2
30.06.2015, 10:06 #5
Лучший ответ Сообщение было отмечено Vladimir93 как решение

Решение

Цитата Сообщение от Vladimir93 Посмотреть сообщение
Именно так я и делал, но возникает проблема, приложение после 12 начинает обновляться при каждом включении.
Нужно еще какое то дополнительное условие. Т.е. если приложение запущено после 12 нужно проверить, обновлено ли оно, и если да, то больше не обновлять, а если нет - обновить. Вот тут у меня и проблема. Не знаю как это реализовать.
Ключевая фраза в моем посте выше - "вы записали дату выгрузки". К примеру это 29.06.2015
Соотвественно запуская приложение 30.06.2015 - проверяете на то что наступил новый день, затем проверяете на то, что уже 12:00 - если условие истина тогда делаете обновление, соостветсвенно после этого обновления опять записываете дату (30.06.2015). При следующем запуске приложение 30 числа условие выполняться не будет! Уловили мысль?
1
Vladimir93
53 / 54 / 8
Регистрация: 28.06.2015
Сообщений: 229
30.06.2015, 12:02  [ТС] #6
Дааа. Что то стало проясняться, но еще не до конца. Попробую.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
30.06.2015, 13:14 #7
Цитата Сообщение от Vladimir93 Посмотреть сообщение
А сервис, это еще и расход ресурсов, для простого конвертера - непростительная роскошь.
Какой расход ресурсов, вы о чем? Сервис запускается только для загрузки данных, отработал - отключается. Запускаем его из AlarmManager, тоже никаких расходов. Курс обновился - вылез Notification, пользователь глянул - о, какая прога, сама курсы качает, молодец какой Vladimir93!
А так - просто поделка.
0
Vladimir93
53 / 54 / 8
Регистрация: 28.06.2015
Сообщений: 229
01.07.2015, 09:58  [ТС] #8
Rube,А когда запускаем AlarmManager? Вот к примеру запускаем AlarmManager, а в это время сети нет, и нет возможности обновиться. Что делать?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.07.2015, 11:01 #9
Vladimir93,
Цитата Сообщение от Vladimir93 Посмотреть сообщение
а в это время сети нет
Иметь ресивер на получение изменения состояния сети
0
Vladimir93
53 / 54 / 8
Регистрация: 28.06.2015
Сообщений: 229
01.07.2015, 11:50  [ТС] #10
А как потом AlarmManager запустить? Время то ушло. Другими словами AlarmManager - сработал в назначенное время, но обновить не получилось.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.07.2015, 11:55 #11
Vladimir93, при апдейте данных записывать в SharedPreferences время текущее.
При появлении интернета (событие в броадкасте) смотреть в эту дату. Если больше суток, то апдейтить.
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
01.07.2015, 13:09 #12
Я записываю время следующего запуска.
0
01.07.2015, 13:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 13:09
Привет! Вот еще темы с решениями:

Обновление данных
Добрый день. Еще такая проблема возникла. Есть форма где нужно...

Обновление данных адаптера
Здравствуйте. Помогите, кто сталкивался. Есть список, где в зависимости от...

Обновление данных в activity
Всем доброй ночи! Как обновить данные в активити при возврате из диалога или...

ExpandableListView обновление данных
Каким образом мне обновить его? Чтобы я изменил данные массива и обновил. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru