package com.letsvote.provider.base; import java.util.Date; import java.util.HashMap; import android.database.Cursor; import android.database.CursorWrapper; import android.provider.BaseColumns; public abstract class AbstractCursor extends CursorWrapper { private final HashMap<String, Integer> mColumnIndexes; public AbstractCursor(Cursor cursor) { super(cursor); mColumnIndexes = new HashMap<String, Integer>(cursor.getColumnCount() * 4 / 3, .75f); } public abstract long getId(); protected int getCachedColumnIndexOrThrow(String colName) { Integer index = mColumnIndexes.get(colName); if (index == null) { index = getColumnIndexOrThrow(colName); mColumnIndexes.put(colName, index); } return index; } public String getStringOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getString(index); } public Integer getIntegerOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getInt(index); } public Long getLongOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getLong(index); } public Float getFloatOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getFloat(index); } public Double getDoubleOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getDouble(index); } public Boolean getBooleanOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getInt(index) != 0; } public Date getDateOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return new Date(getLong(index)); } public byte[] getBlobOrNull(String colName) { int index = getCachedColumnIndexOrThrow(colName); if (isNull(index)) return null; return getBlob(index); } }