Вызов веб-службы RESTful с использованием FutureTask

В настоящее время я использую AsyncHttpClient для вызова RESTfull WebService с устройства Android, и он работает нормально. Я хочу оптимизировать его, используя FutureTask, так как он позволяет нам проверить, закончен ли поток и прочее. Код, который я использую сейчас, выглядит примерно так

AsyncHttpClient client = new AsyncHttpClient();
    try {
        client.post(applicationContext, "http://" + ip
                + ":8080/MyWebService/jaxrs/service/getData",
                new StringEntity("String"), "application/json",
                new AsyncHttpResponseHandler() {

                    @Override
                    public void onSuccess(String response) {


                    }

                    @Override
                    public void onFailure(Throwable e, String content) {
                        System.err.println("Exception: "
                                    + e.getMessage());
                    }

                });
    } catch (Exception e) {
        System.err.println("Exception: "
                                    + e.getMessage());
    }

Что я знаю, так это сделать AsyncHttpClient внутри функции вызова Callable для вызова WebService.

Здесь я запутался, так как AsyncHttpClient также работает в потоке. Как мне позвонить в веб-сервис, используя Future.

ПРИМЕЧАНИЕ: - Новичок в потоках.

1 ответ

Решение

Future + HttpClient = AsyncHttpClient

Если вызывается AsyncHttpClient.onSuccess() или AsyncHttpClient.onFailure(), это означает, что поток завершен или он все еще работает (заблокирован).

== EDIT ==

Хорошо, пример здесь. Пожалуйста, прочитайте больше о FutureTask и Executor в документе Java.

FutureTask<HttpResult> future = new FutureTask<HttpResult>(new Callable<HttpResult>() {
        // GET A HTTP RESULT IN ANOTHER THREAD
        @Override
        public HttpResult call() throws Exception {
            HttpClient httpClient =new HttpClient();
            //set url, http method and params
            HttpResult result = httpClient.getResult(); // sync request, it costs a long time.  
            return result;
        }
    }){
        // FutureTask.DONE() WILL BE CALLED ASYNCHRONOUSLY
        @Override
        protected void done() {
            try {
                HttpResult result=get();
                //read the result
            } catch (InterruptedException e) {
                logger.error("", e);
            } catch (ExecutionException e) {
                logger.error("", e);
            }

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