Вызов веб-службы 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
Здесь я запутался, так как 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);
}
}
};