package com.kth.baasio.callback;
import com.kth.baasio.exception.BaasioException;
import org.springframework.web.client.HttpClientErrorException;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
public abstract class BaasioAsyncTask<T> extends AsyncTask<Void, Void, T> {
BaasioCallback<T> mCallback;
private Handler mHandler = new Handler(Looper.getMainLooper());
public BaasioAsyncTask(BaasioCallback<T> callback) {
this.mCallback = callback;
}
private void onException(final BaasioException e) {
mHandler.post(new Runnable() {
@Override
public void run() {
if (mCallback != null) {
mCallback.onException(e);
}
}
});
}
@Override
protected T doInBackground(Void... v) {
try {
return doTask();
} catch (HttpClientErrorException e) {
onException(new BaasioException(e.getStatusCode(), e.getResponseBodyAsString()));
} catch (BaasioException e) {
onException(e);
} catch (Exception e) {
onException(new BaasioException(e));
}
return null;
}
public abstract T doTask() throws BaasioException;
@Override
protected void onPostExecute(T response) {
if (mCallback != null && response != null) {
mCallback.onResponse(response);
}
}
}