Change ThreadPoolExecutor + Handler to AsyncTask
// From
public void read(final Callback<T[]> callback) {
Runnable runner = new Runnable() {
@Override
public void run() {
final T[] result;
try {
result = gson.fromJson(new String(httpProvider.get()), exemplar);
} catch (Exception e) {
postFailure(callback, e);
return;
}
postSuccess(callback, result);
}
};
threadPool.submit(runner);
}
private <J> void postSuccess(final Callback<J> callback, final J data) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onSuccess(data);
}
});
}
private <J> void postFailure(final Callback<J> callback, final Exception e) {
handler.post(new Runnable() {
@Override
public void run() {
callback.onFailure(e);
}
});
}
// To
public void read(final Callback<T[]> callback) {
new AsyncTask<Void, Void, AsyncTaskResult<T[]>>() {
@Override
protected AsyncTaskResult doInBackground(Void... voids) {
try {
return new AsyncTaskResult(gson.fromJson(new String(httpProvider.get()), exemplar));
} catch (Exception e) {
return new AsyncTaskResult(e);
}
}
@Override
protected void onPostExecute(AsyncTaskResult<T[]> asyncTaskResult) {
if ( asyncTaskResult.getError() != null ) {
callback.onFailure(asyncTaskResult.getError());
} else {
callback.onSuccess(asyncTaskResult.getResult());
}
}
}.execute();
}