Хобрук: Ваш путь к мастерству в программировании

Вызов HTTP в задаче синхронизации несколько раз в Android

Я хочу отправить некоторые данные через http при нажатии кнопки, каждый раз, когда пользователь нажимает кнопку, некоторые данные должны быть добавлены в очередь, затем они будут отправлены через http, после получения ответа я хочу удалить его из очереди затем делаем то же самое со следующими элементами в очереди.

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

Это асинхронный код в методе doInBackground:

@Override
protected Boolean doInBackground(Void... params) {
 try {
 msgResponseIS = getInputStream(generatedLink);
 } catch (IOException e) {
  // TODO Auto-generated catch block
 e.printStackTrace();
 }
 if (msgResponseIS != null){


      BufferedReader r = new BufferedReader(new InputStreamReader(
       msgResponseIS));
      StringBuilder total = new StringBuilder();
      String line;
      try {
          while ((line = r.readLine()) != null) {
       total.append(line);
          }

          setResponseValue(total.toString());

      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }


     return true;}
     else
     return false;
      }

  • отключите кнопку, но вы получите ответ обратно. 01.01.2013
  • Я не могу этого сделать, согласно логике моего приложения, пользователь может много раз нажимать кнопку для отправки данных. Но запросы должны быть добавлены в очередь. И количество запросов не определено. 01.01.2013
  • запустите индикатор выполнения, но вы получите ответ. Когда вы получите ответ, запустите действие снова. 01.01.2013
  • Да, это кажется хорошей идеей, но могу ли я снова вызвать асинхронность в методе onpost? 01.01.2013
  • вы можете сделать это снова нажатием кнопки .. 01.01.2013
  • Как насчет очереди, я не знаю, сколько раз пользователь будет нажимать на кнопку, я должен пройти ее или как? 01.01.2013
  • одним нажатием кнопки отправьте свои элементы на сервер с индикатором выполнения.. снова, когда щелкнет, он пойдет.. я думаю, нет необходимости в очереди. 01.01.2013
  • установив флаг, вы также можете это сделать. как ответил @mamdouh alramadan 01.01.2013

Ответы:


1

1. В функции preExecute вы можете установить свойство clickable следующим образом.
Button.setClickable(false)
2. После вызова doInBackground вызовите метод пост-выполнения и установите для clickable значение true.
Button.setClickable(true);

01.01.2013

2

когда запрос вызывается, сделайте myButton.setEnabled(false); и когда HTTP-запрос завершен, вы можете сделать

myButton.setEnabled(true);

где myButton — это кнопка, которая вызывает вашу асинхронную задачу. таким образом вы можете гарантировать, что пользователь не сможет использовать эту кнопку, пока выполняется асинхронная задача.

EDIT: другой способ — установить флаг boolean free = ture;. когда кнопка нажата, просто установите флаг на free = false; и выполните проверку. если флаг истинен, то можно сделать http-вызов, иначе он не может быть сделан.

01.01.2013
  • ОН не хочет отключать кнопку... любым другим способом 01.01.2013
  • вы можете заблокировать очередь с тем же флагом, поэтому, когда флаг свободен, вы можете вытолкнуть или (DeQueue) следующий элемент из вашей очереди. 02.01.2013
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..