package com.jasonrobinson.racer.async; import android.os.AsyncTask; import android.util.Log; import com.jasonrobinson.racer.db.DatabaseManager; import com.jasonrobinson.racer.enumeration.RaceOptions; import com.jasonrobinson.racer.model.Race; import com.jasonrobinson.racer.module.GraphHolder; import com.jasonrobinson.racer.network.RaceClient; import java.net.SocketTimeoutException; import java.util.List; import retrofit.RetrofitError; public class RaceAsyncTask extends AsyncTask<Void, Void, List<Race>> { private static final String TAG = RaceAsyncTask.class.getSimpleName(); DatabaseManager mDatabaseManager; boolean mReturnData; public RaceAsyncTask(boolean returnData) { mReturnData = returnData; mDatabaseManager = GraphHolder.getInstance().get(DatabaseManager.class); } @Override protected List<Race> doInBackground(Void... params) { Log.d(TAG, "Downloading races"); List<Race> races = fetchFromWeb(); if (races == null) { Log.d(TAG, "Failed to download races"); return null; } Log.d(TAG, "Finished downloading (" + races.size() + " entries)"); Log.d(TAG, "Cacheing races (" + races.size() + " entries)"); int rows = mDatabaseManager.addOrUpdateRaceList(races); Log.d(TAG, "Finished cacheing (" + rows + " entries)"); if (mReturnData) { return fetchFromCache(); } else { return null; } } private List<Race> fetchFromCache() { return mDatabaseManager.getRaces(RaceOptions.ALL); } private List<Race> fetchFromWeb() { try { return new RaceClient().fetchRaces(); } catch (SocketTimeoutException e) { e.printStackTrace(); } catch (RetrofitError e) { e.printStackTrace(); } return null; } }