package com.turbomanage.httpclient.android;
import android.os.AsyncTask;
import com.turbomanage.httpclient.AsyncCallback;
import com.turbomanage.httpclient.AsyncHttpClient;
import com.turbomanage.httpclient.AsyncRequestExecutor;
import com.turbomanage.httpclient.HttpRequest;
import com.turbomanage.httpclient.HttpResponse;
/**
* AsyncTask that wraps an HttpRequest. Designed to be used in conjunction with
* {@link AsyncHttpClient} so that requests can be made off the UI thread.
*
* @author David M. Chandler
*/
public class DoHttpRequestTask extends AsyncTask<HttpRequest, Void, HttpResponse> implements AsyncRequestExecutor {
private AsyncHttpClient client;
private AsyncCallback callback;
private Exception savedException;
/**
* Construct a new task with a callback to invoke when the request completes
* or fails.
*
* @param callback
*/
public DoHttpRequestTask(AsyncHttpClient httpClient, AsyncCallback callback) {
this.client = httpClient;
this.callback = callback;
}
@Override
protected HttpResponse doInBackground(HttpRequest... params) {
try {
if (params != null && params.length > 0) {
HttpRequest httpRequest = params[0];
return client.tryMany(httpRequest);
}
else {
throw new IllegalArgumentException(
"DoHttpRequestTask takes exactly one argument of type HttpRequest");
}
} catch (Exception e) {
this.savedException = e;
cancel(true);
}
return null;
}
@Override
protected void onPostExecute(HttpResponse result) {
callback.onComplete(result);
}
@Override
protected void onCancelled() {
callback.onError(this.savedException);
}
/**
* Needed in order for this Task class to implement the {@link AsyncRequestExecutor} interface.
*
* @see com.turbomanage.httpclient.AsyncRequestExecutor#execute(com.turbomanage.httpclient.HttpRequest)
*/
@Override
public void execute(HttpRequest httpRequest) {
super.execute(httpRequest);
}
}