Отправляйте запрос на веб-сервис каждые 5 секунд

Я хочу прослушать базу данных сервера sql, чтобы узнать, есть ли изменения данных в Android, поэтому я хочу отправлять запрос в веб-службу каждые 5 секунд, чтобы узнать о новом значении данных. Как я могу это сделать? Можете привести пример?

4 ответа

Решение

Вы можете сделать это с AsyncTask,

public void callAsynchronousTask() {
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {       
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {       
                    try {
                        PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
                        // PerformBackgroundTask this class is the class that extends AsynchTask 
                        performBackgroundTask.execute();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}

Подробнее: Как выполнить асинхронную задачу несколько раз через фиксированные промежутки времени

Используйте класс Service и внутри класса Service реализуйте планировщик потоков, который будет отправлять запрос каждые 5 секунд. Ниже приведен фрагмент кода:

public class ProcessingService extends Service {

private Timer timer = new Timer();


@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            sendRequest();
        }
    }, 0, 5000;//5 Seconds
}

@Override
public void onDestroy() {
    super.onDestroy();
    shutdownService();

}

}

Используйте этот код:

    ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
    scheduler.scheduleAtFixedRate(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            // Hit WebService
        }
    }, 0, 5, TimeUnit.SECONDS);

Опрос вообще не очень хорошая идея. Потому что это создает ненужную нагрузку на сервер. В вашем случае 20 запросов в минуту на пользователя.

Итак, перейдите на механизм толчка. Таким образом, идея будет такой: всякий раз, когда вы получаете push-сообщение, вы вызываете веб-сервис для получения последних данных.

Эта ссылка поможет вам: Push, Don't Poll - Как использовать GCM для обновления приложения

Другие вопросы по тегам