2016-03-04 7 views
0

Я новичок в разработке Android и Java, поэтому несите меня, и, пожалуйста, дайте мне знать, если какая-либо моя фраза или что-то не так. Я искал много часов, и я столкнулся с таким количеством неизвестных терминов и методов реализации, которые могут или не могут работать, что я ушел, и бросил себя в тишину.Непрерывно извлекать данные из базы данных?

В настоящее время я разрабатываю тип фида для приложения для Android, и моя главная цель заключается в том, что я хочу, чтобы иметь возможность сбрасывать фид (аналогично приложению Gmail) и иметь недавно введенные данные в базы данных, загруженной на устройство и отображаемой на экране. Чтобы быть ясным, я хочу только извлекать данные, когда приложение открыто.

Вот какой-то фон в приложении. В основной деятельности находится внутренний класс FragmentPagerAdapter, который контролирует 3 фрагмента в TabLayout. Первая вкладка - это фид, второй - список контактов (которые я также хочу обновить так же, как и для фида), а третий - это просто материал профиля.

Что я сделал до сих пор является то, что у меня есть посеяны дб на бэкэнд сервере (Python/SQLAlchemy), и я создал AsyncTask в обеих подающих и контактах фрагментов, GetS (с использованием HttpURLConnection) все соответствующие данные и приносит им клиентскую сторону. Оттуда я извлекаю нужные данные из полученного JSON и отображаю его динамически сгенерированным TextViews. Эта часть работает отлично.

Я попытался остановить/перезагрузить AsyncTask, но документы говорят, что это не-go. Я пробовал notifyDataSetChange(), но он также не работает. Также, для подтверждения, notifyDataSetChange() автоматически обновляет фрагменты способом, который выполняет мою задачу? Я прочитал некоторые из документации по этому вопросу и рассмотрел многие темы здесь, но я не смог собрать четкий ответ для моей реализации, и я действительно смущен этим ...

Так может кто-то может направить мне, где можно узнать, как непрерывно извлекать данные из базы данных после того, как AsyncTask уже запущен или запущен в данный момент? Или, по крайней мере, как это сделать, чтобы я мог искать более эффективно? Благодаря!

ответ

0

AsyncTask - это путь. В вашем onResume() выполните AsyncTask. Да, документы говорят, что нет необходимости повторно использовать AsyncTask. Поэтому вам нужно будет сделать это:

new MyAsyncTask.execute(url); 

Теперь это было для одноразового обновления. Как насчет периодических обновлений? Самый простой способ - использовать CountDownTimer, который периодически запускает AsyncTask. Документы: http://developer.android.com/reference/android/os/CountDownTimer.html

Кроме того, не делайте анонимным CountDownTimer, вместо этого создайте класс, который расширяет его. Итак, у вас будет класс с именем MyCountDownTimer extends CountDownTimer. onFinish() - это то, где вы стреляете AsyncTask.

Надежда, что помогает

+0

Из того, что я понимаю, осколок 'onResume()' будет вызываться только если деятельность, которая принимает фрагмент паузы, а затем возобновляется, так что я не уверен, что позволит пользователям вытащите фид (который сам является фрагментом) и обновите данные с сервера. Но я буду держать это предложение таймера в моем заднем кармане, спасибо за это! – jexx04

+0

Оказывается, все, что я искал, было Swipe-to-Refresh (https://developer.android.com/training/swipe/add-swipe-interface.html). – jexx04

Смежные вопросы