package com.example.datatocursor; import android.database.AbstractCursor; import android.database.Cursor; /** * Provide a Cursor from a fixed list of data * column 1 - _id * column 2 - filename * column 3 - file type */ public class DataToCursor extends AbstractCursor { private static final String[] COLUMN_NAMES = {"_id", "filename", "type"}; private static final String[] DATA_ROWS = { "one.mpg", "two.jpg", "tre.dat", "fou.git", }; @Override public int getCount() { return DATA_ROWS.length; } @Override public int getColumnCount() { return COLUMN_NAMES.length; } @Override public String[] getColumnNames() { return COLUMN_NAMES; } @Override public int getType(int column) { switch(column) { case 0: return Cursor.FIELD_TYPE_INTEGER; case 1: case 2: return Cursor.FIELD_TYPE_STRING; default: throw new IllegalArgumentException(Integer.toString(column)); } } /** * Return the _id value (the only integer-valued column). * Conveniently, rows and array indices are both 0-based. */ @Override public int getInt(int column) { int row = getPosition(); switch(column) { case 0: return row; default: throw new IllegalArgumentException(Integer.toString(column)); } } /** SQLite _ids are actually long, so make this work as well. * This direct equivalence is usually not applicable; do not blindly copy. */ @Override public long getLong(int column) { return getInt(column); } @Override public String getString(int column) { int row = getPosition(); switch(column) { case 1: return DATA_ROWS[row]; case 2: return extension(DATA_ROWS[row]); default: throw new IllegalArgumentException(Integer.toString(column)); } } /** Stub version, works for sample filenames like only */ private String extension(String path) { return path.substring(4); } // Remaining get*() methods call this as there are no other column types private char dieBadColumn() { throw new IllegalArgumentException("No columns of this type"); } @Override public short getShort(int column) { return (short) dieBadColumn(); } @Override public float getFloat(int column) { return dieBadColumn(); } @Override public double getDouble(int column) { return dieBadColumn(); } @Override public boolean isNull(int column) { return false; } }