Как отобразить пользовательский интерфейс с обновленными данными с сервера в Android

#android

#Android

Вопрос:

Я разрабатываю одно приложение, которое отправит запрос на сервер и получит ответ с данными, а затем запустит домашнюю страницу с обновленными данными.

Я использую следующий подход:

  1. создайте обработчик на стороне пользовательского интерфейса и подпишитесь на сервис.
  2. после подписки на сервис отправьте запрос на сервер через сервис.
  3. служба получила данные и обновила данные в зарегистрированном обработчике.

Проблема: по моим наблюдениям, моя домашняя страница запускается со значением по умолчанию, поэтому кажется, что перед получением подписки на сервис запускается пользовательский интерфейс.

Я хочу ограничить отображение домашней страницы значением по умолчанию, когда с сервера приходит ответ с данными, тогда только он должен отображаться с обновленными данными. ИЛИ он должен отображать диалоговое окно занятости до тех пор, пока домашняя страница не будет обновлена полученными данными, например, как он ведет себя, когда мы нажимаем, чтобы получить информацию о погоде / запасах на телефоне Android.

Итак, кто-нибудь может помочь с соответствующим подходом? Если кто-то может поделиться примером, то это было бы здорово для меня.

Спасибо, Пикс

Ответ №1:

Просто пройдите через AsyncTask, его легко реализовать потоковую обработку в Android, также известную как безболезненная потоковая обработка.

Позвольте мне подробнее изучить AsyncTask. Он предоставляет 4 метода:

  1. doInBackground() — выполнить фоновую задачу здесь
  2. onPostExecute() — выполняет операции типа отображения результата
  3. onProgressUpdate() — выполнить обновление пользовательского интерфейса на основе текущего обновления
  4. onPreExecute() — выполняет все задачи, которые необходимы перед выполнением процесса doInBackground(), в основном мы показываем ProgressBar (диалог занятости с текстом «Пожалуйста, подождите …»).

Например:

 private class LongOperation extends AsyncTask {

    @Override
    protected void onPreExecute() {
       // Things to be done before execution of long running operation. For example showing ProgessDialog
    }

    @Override
    protected String doInBackground(String... params) {
       // perform long running operation operation
      return null;
    }

    @Override
    protected void onPostExecute(String result) {
      // execution of result of Long time consuming operation
    }

    @Override
    protected void onProgressUpdate(Void... values) {
      // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
    }
}
  

Теперь вы можете выполнить AsyncTask как:

 new LongOperation().execute(params);
  

Комментарии:

1. Спасибо за ваш ответ. Не могли бы вы объяснить это на каком-нибудь примере кода в реальном времени, чтобы это помогло мне реализовать мой сценарий.

2. @piks я уже упоминал комментарии в каждом методе, однако позвольте мне рассказать вам вкратце: выполните все длительные задачи (вызов веб-сервиса) внутри метода doInBackground (), отобразите диалоговое окно (индикатор выполнения для ожидающего сообщения) в методе onPreExecute () и обновите назначение отображения пользовательского интерфейса в методе onPostExecute().