package what.whatandroid.barcode; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.support.v4.content.AsyncTaskLoader; import api.barcode.Barcode; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * We don't use the Barcodes as a content provider so we don't use the CursorLoader */ public class BarcodeAsyncLoader extends AsyncTaskLoader<List<Barcode>> { private BarcodeDatabaseHelper dbHelper; private List<Barcode> barcodes; private final String[] allCols = {BarcodeDatabaseHelper.COL_UPC, BarcodeDatabaseHelper.COL_DATE, BarcodeDatabaseHelper.COL_TERMS, BarcodeDatabaseHelper.COL_TAGS, BarcodeDatabaseHelper.COL_LABEL}; public BarcodeAsyncLoader(Context context){ super(context); dbHelper = new BarcodeDatabaseHelper(context); } @Override public List<Barcode> loadInBackground(){ barcodes = null; try { SQLiteDatabase database = dbHelper.getWritableDatabase(); if (database != null){ Cursor cursor = database.query(BarcodeDatabaseHelper.TABLE, allCols, null, null, null, null, BarcodeDatabaseHelper.COL_DATE + " DESC"); cursor.moveToFirst(); barcodes = new ArrayList<Barcode>(); while (!cursor.isAfterLast()){ barcodes.add(readBarcode(cursor)); cursor.moveToNext(); } cursor.close(); database.close(); } } catch (SQLiteException e){ e.printStackTrace(); } return barcodes; } private Barcode readBarcode(Cursor cursor){ return new Barcode(cursor.getString(0), new Date(cursor.getLong(1)), cursor.getString(2), cursor.getString(3), cursor.getString(4)); } @Override protected void onStartLoading(){ if (barcodes != null){ deliverResult(barcodes); } if (takeContentChanged() || barcodes == null){ forceLoad(); } } @Override protected void onStopLoading(){ cancelLoad(); } }