danielpassos
10/20/2012 - 6:05 PM

Change ThreadPoolExecutor + Handler to AsyncTask

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();
}