Как лучше реализовать получение данных API через 3 разных источника?
Как лучше реализовать получение данных API через 3 разных источника?
К примеру в первом источнике 14000, во втором 1500, в третьем 1500.
Данные получаю по 50 на страницу.
Хочу объединить все 3 источника в 1 ленту(ListView) отсортированную по дате. От самых новых к самым старым. При получении информации есть дата в таком виде: 2016-03-07 23:44:06
Собственно вопрос как соединить? Из того что пришло на ум это:
- парсить все данные, записывать в локальную базу и дальше уже сортировать и работать с базой ?!
Насколько это логично, либо есть другие варианты?
Игорь: не важно дело в том что данные в каждом из API расположены не равномерно. К примеру данные с датой 2016-03-07 в первом API могут быть на второй странице, а в двух других на первой странице к примеру.
Поэтому либо надо просто получать все данные из двух меньших API и после добавлять их по мере загрузки большего API
newdancer: не могу чтото посоветовать вот так вот с головы не зная реальной вашей ситуации, но мои мысли таковы:
1. rxjava позволит вам потоково получать данные с разных источников, при этом код будет ясным и простым и не придется долго думать что делать, если одно айпи недоступно, или недоступно раз в 10 секунд, или один из апи сильно нагружен сегодня и еле шевелиться)
2. получать за раз толпу данных когда выводиться всего 50 нет смысла
3. об обновлении данных стоит както сообщать, а не подсовывать пока юзер с ними работает (ну тока если вы не графики какие рисуете, и то есть ньюансы)
4. база данных будет делать тоже самое, что вы можете сделать куда быстрее и удобнее у себя в коде (ибо вы реализуете только некий кеш данных и его сортировку)
Так что Ваша задача делиться на две небольшие:
как получать удобно и асинхронно (rxjava тут очень кстати)
как отобразить не мешая юзверю (тут достаточно подумать в зависимости от типа ваших данных)
Игорь: тут скорей наверное с базой проще. ведь надо чтобы при любых изменениях в API чтобы через сервис приходило Notification уведомление, а для этого надо знать на чем прошлый раз загрузка остановилась. Данные идут обычные текстовые + 1 картинка(из интернета через библиотеку Picasso)
newdancer: ну если вы планируете хранить данные/долговременный_кэш на клиенте, то можно (желательно) в базу. пример яндекс/гугль карты которые хранят кэш.
а просто помнить на чем в прошлый раз остановилось (последнюю дату, айди) так хватило бы SharedPreferences.
Но если приложение не чисто для себя, то неплохо бы кэш чистить, ибо 1000 картинок по 100 килобайт уже 100 мегабайт будет. вроде немного, но 10ток таких приложений съедят гиг. Не у всех же топовые смарты с кучей памяти и без музыки
newdancer: вместо Picasso возьмите Glide, там используется дисковый LRU-кэш, руками практически ничего делать не надо. Если решили в базу всё ложить, то RxJava вам не нужна, но я бы в такой задаче пристально посмотрел в её сторону.
Denis Zagayevskiy: попробовал сделать без БД. Просто отдельно выводить данные из трех API получается ерунда. так как некоторые данные повторяются и надо их отсеивать. для этого наверное лучше подойдет база