/*
**
** Copyright 2014, Jules White
**
**
*/
package org.magnum.videoup.client;
import java.util.concurrent.Callable;
import android.os.AsyncTask;
import android.util.Log;
public class CallableTask<T> extends AsyncTask<Void,Double,T> {
private static final String TAG = CallableTask.class.getName();
public static <V> void invoke(Callable<V> call, TaskCallback<V> callback){
new CallableTask<V>(call, callback).execute();
}
private Callable<T> callable_;
private TaskCallback<T> callback_;
private Exception error_;
public CallableTask(Callable<T> callable, TaskCallback<T> callback) {
callable_ = callable;
callback_ = callback;
}
@Override
protected T doInBackground(Void... ts) {
T result = null;
try{
result = callable_.call();
} catch (Exception e){
Log.e(TAG, "Error invoking callable in AsyncTask callable: "+callable_, e);
error_ = e;
}
return result;
}
@Override
protected void onPostExecute(T r) {
if(error_ != null){
callback_.error(error_);
}
else {
callback_.success(r);
}
}
}