Добрый день, я разрабатываю приложение для Android. Асинхронность не портит UX при длительной загрузке. Ничего общего с протоколом HTTP без сохранения состояния. Тем не менее, я хочу закодировать «получить ответ» синхронно.

аю ответы из аналогичных вопросов и ответов

Как вы создаете асинхронный HTTP-запрос в JAVA? | Шаблон проектирования асинхронного программирования |
AsyncTask Android - шаблон проектирования и возвращаемые значения

Я вижу много решений, но ни одно из них не удовлетворяет меня.

Способ слушателя

Как только результаты получены, обработка выполняется в методе onResult.

public interface GeolocationListener {
public void onResult(Address[] addresses);
public void onError(Exception e);
}

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

Способ сервлет

public class SignGuestbookServlet extends HttpServlet {

    public void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws IOException {
        // ...
        resp.sendRedirect("/guestbook.jsp");
    }
}

Нет открытого кода Java, вызывающего сервлет. Все настройки выполняются в файле web.xml.

Так, как я хочу

Ждите ответа как этот

Response a = getResponse();
// wait until the response is received, do not go further
// process
Response b = getResponse();
// wait until the response is received, do not go further
process(a,b);

Существует ли шаблон проектирования для обработки асинхронного запроса и ожидания ответа, как указано выше? Другой способ, чем слушатель. Пожалуйста, не библиотека или рамки.

РЕДАКТИРОВАТЬ Спасибо до сих пор ответы. Я не дал вам полную картину, поэтому я показал класс Geolocation, я начал реализацию. Я не знаю, как реализовать метод. Может кто-то показывает "как"? Он (или она) также должен реализовать слушателя для получения результатов

private Address getFullAddress (String text, AddressListener listener, ... ){

    // new Geolocation(text, listener, options).start() 
    // implements Geolocation.GeolocationListener   
    // how to return the Address from the onResult ?
}

Ответы на вопрос(5)

Ваш ответ на вопрос