Methods Summary |
---|
public void | abortUpdates()
synchronized(mUpdatedRows) {
mUpdatedRows.clear();
}
|
protected void | checkPosition()This function throws CursorIndexOutOfBoundsException if
the cursor position is out of bounds. Subclass implementations of
the get functions should call this before attempting
to retrieve data.
if (-1 == mPos || getCount() == mPos) {
throw new CursorIndexOutOfBoundsException(mPos, getCount());
}
|
public void | close()
mClosed = true;
mContentObservable.unregisterAll();
deactivateInternal();
|
public boolean | commitUpdates(java.util.Map values)
return false;
|
public boolean | commitUpdates()
return commitUpdates(null);
|
public void | copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)
// Default implementation, uses getString
String result = getString(columnIndex);
if (result != null) {
char[] data = buffer.data;
if (data == null || data.length < result.length()) {
buffer.data = result.toCharArray();
} else {
result.getChars(0, result.length(), data, 0);
}
buffer.sizeCopied = result.length();
}
|
public void | deactivate()
deactivateInternal();
|
public void | deactivateInternal()
if (mSelfObserver != null) {
mContentResolver.unregisterContentObserver(mSelfObserver);
mSelfObserverRegistered = false;
}
mDataSetObservable.notifyInvalidated();
|
public boolean | deleteRow()
return false;
|
public void | fillWindow(int position, CursorWindow window)Copy data from cursor to CursorWindow
if (position < 0 || position > getCount()) {
return;
}
window.acquireReference();
try {
int oldpos = mPos;
mPos = position - 1;
window.clear();
window.setStartPosition(position);
int columnNum = getColumnCount();
window.setNumColumns(columnNum);
while (moveToNext() && window.allocRow()) {
for (int i = 0; i < columnNum; i++) {
String field = getString(i);
if (field != null) {
if (!window.putString(field, mPos, i)) {
window.freeLastRow();
break;
}
} else {
if (!window.putNull(mPos, i)) {
window.freeLastRow();
break;
}
}
}
}
mPos = oldpos;
} catch (IllegalStateException e){
// simply ignore it
} finally {
window.releaseReference();
}
|
protected void | finalize()
if (mSelfObserver != null && mSelfObserverRegistered == true) {
mContentResolver.unregisterContentObserver(mSelfObserver);
}
|
public byte[] | getBlob(int column)
/* -------------------------------------------------------- */
/* These need to be implemented by subclasses */
// TODO implement getBlob in all cursor types
throw new UnsupportedOperationException("getBlob is not supported");
|
public int | getColumnCount()
return getColumnNames().length;
|
public int | getColumnIndex(java.lang.String columnName)
// Hack according to bug 903852
final int periodIndex = columnName.lastIndexOf('.");
if (periodIndex != -1) {
Exception e = new Exception();
Log.e(TAG, "requesting column name with table name -- " + columnName, e);
columnName = columnName.substring(periodIndex + 1);
}
String columnNames[] = getColumnNames();
int length = columnNames.length;
for (int i = 0; i < length; i++) {
if (columnNames[i].equalsIgnoreCase(columnName)) {
return i;
}
}
if (Config.LOGV) {
if (getCount() > 0) {
Log.w("AbstractCursor", "Unknown column " + columnName);
}
}
return -1;
|
public int | getColumnIndexOrThrow(java.lang.String columnName)
final int index = getColumnIndex(columnName);
if (index < 0) {
throw new IllegalArgumentException("column '" + columnName + "' does not exist");
}
return index;
|
public java.lang.String | getColumnName(int columnIndex)
return getColumnNames()[columnIndex];
|
public abstract java.lang.String[] | getColumnNames()
|
public abstract int | getCount()
|
protected DataSetObservable | getDataSetObservable()This is hidden until the data set change model has been re-evaluated.
return mDataSetObservable;
|
public abstract double | getDouble(int column)
|
public android.os.Bundle | getExtras()
return Bundle.EMPTY;
|
public abstract float | getFloat(int column)
|
public abstract int | getInt(int column)
|
public abstract long | getLong(int column)
|
public final int | getPosition()
return mPos;
|
public abstract short | getShort(int column)
|
public abstract java.lang.String | getString(int column)
|
protected java.lang.Object | getUpdatedField(int columnIndex)This function returns the uncommitted updated value for the field
at columnIndex. NOTE: This function and {@link #isFieldUpdated} should
be called together inside of a block synchronized on mUpdatedRows.
Map<String, Object> updates = mUpdatedRows.get(mCurrentRowID);
return updates.get(getColumnNames()[columnIndex]);
|
public boolean | getWantsAllOnMoveCalls()
return false;
|
public CursorWindow | getWindow()returns a pre-filled window, return NULL if no such window
return null;
|
public boolean | hasUpdates()Returns true if there are pending updates that have not yet been committed.
synchronized(mUpdatedRows) {
return mUpdatedRows.size() > 0;
}
|
public final boolean | isAfterLast()
if (getCount() == 0) {
return true;
}
return mPos == getCount();
|
public final boolean | isBeforeFirst()
if (getCount() == 0) {
return true;
}
return mPos == -1;
|
public boolean | isClosed()
return mClosed;
|
protected boolean | isFieldUpdated(int columnIndex)This function returns true if the field has been updated and is
used in conjunction with {@link #getUpdatedField} to allow subclasses to
support reading uncommitted updates. NOTE: This function and
{@link #getUpdatedField} should be called together inside of a
block synchronized on mUpdatedRows.
if (mRowIdColumnIndex != -1 && mUpdatedRows.size() > 0) {
Map<String, Object> updates = mUpdatedRows.get(mCurrentRowID);
if (updates != null && updates.containsKey(getColumnNames()[columnIndex])) {
return true;
}
}
return false;
|
public final boolean | isFirst()
return mPos == 0 && getCount() != 0;
|
public final boolean | isLast()
int cnt = getCount();
return mPos == (cnt - 1) && cnt != 0;
|
public abstract boolean | isNull(int column)
|
public final boolean | move(int offset)
return moveToPosition(mPos + offset);
|
public final boolean | moveToFirst()
return moveToPosition(0);
|
public final boolean | moveToLast()
return moveToPosition(getCount() - 1);
|
public final boolean | moveToNext()
return moveToPosition(mPos + 1);
|
public final boolean | moveToPosition(int position)
// Make sure position isn't past the end of the cursor
final int count = getCount();
if (position >= count) {
mPos = count;
return false;
}
// Make sure position isn't before the beginning of the cursor
if (position < 0) {
mPos = -1;
return false;
}
// Check for no-op moves, and skip the rest of the work for them
if (position == mPos) {
return true;
}
boolean result = onMove(mPos, position);
if (result == false) {
mPos = -1;
} else {
mPos = position;
if (mRowIdColumnIndex != -1) {
mCurrentRowID = Long.valueOf(getLong(mRowIdColumnIndex));
}
}
return result;
|
public final boolean | moveToPrevious()
return moveToPosition(mPos - 1);
|
protected void | notifyDataSetChange()This is hidden until the data set change model has been re-evaluated.
mDataSetObservable.notifyChanged();
|
protected void | onChange(boolean selfChange)Subclasses must call this method when they finish committing updates to notify all
observers.
synchronized (mSelfObserverLock) {
mContentObservable.dispatchChange(selfChange);
if (mNotifyUri != null && selfChange) {
mContentResolver.notifyChange(mNotifyUri, mSelfObserver);
}
}
|
public boolean | onMove(int oldPosition, int newPosition)This function is called every time the cursor is successfully scrolled
to a new position, giving the subclass a chance to update any state it
may have. If it returns false the move function will also do so and the
cursor will scroll to the beforeFirst position.
return true;
|
public void | registerContentObserver(ContentObserver observer)
mContentObservable.registerObserver(observer);
|
public void | registerDataSetObserver(DataSetObserver observer)
mDataSetObservable.registerObserver(observer);
|
public boolean | requery()
if (mSelfObserver != null && mSelfObserverRegistered == false) {
mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
mSelfObserverRegistered = true;
}
mDataSetObservable.notifyChanged();
return true;
|
public android.os.Bundle | respond(android.os.Bundle extras)
return Bundle.EMPTY;
|
public void | setNotificationUri(android.content.ContentResolver cr, android.net.Uri notifyUri)Specifies a content URI to watch for changes.
synchronized (mSelfObserverLock) {
mNotifyUri = notifyUri;
mContentResolver = cr;
if (mSelfObserver != null) {
mContentResolver.unregisterContentObserver(mSelfObserver);
}
mSelfObserver = new SelfContentObserver(this);
mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver);
mSelfObserverRegistered = true;
}
|
public boolean | supportsUpdates()
return mRowIdColumnIndex != -1;
|
public void | unregisterContentObserver(ContentObserver observer)
// cursor will unregister all observers when it close
if (!mClosed) {
mContentObservable.unregisterObserver(observer);
}
|
public void | unregisterDataSetObserver(DataSetObserver observer)
mDataSetObservable.unregisterObserver(observer);
|
public boolean | update(int columnIndex, java.lang.Object obj)
if (!supportsUpdates()) {
return false;
}
// Long.valueOf() returns null sometimes!
// Long rowid = Long.valueOf(getLong(mRowIdColumnIndex));
Long rowid = new Long(getLong(mRowIdColumnIndex));
if (rowid == null) {
throw new IllegalStateException("null rowid. mRowIdColumnIndex = " + mRowIdColumnIndex);
}
synchronized(mUpdatedRows) {
Map<String, Object> row = mUpdatedRows.get(rowid);
if (row == null) {
row = new HashMap<String, Object>();
mUpdatedRows.put(rowid, row);
}
row.put(getColumnNames()[columnIndex], obj);
}
return true;
|
public boolean | updateBlob(int columnIndex, byte[] value)
return update(columnIndex, value);
|
public boolean | updateDouble(int columnIndex, double value)
return update(columnIndex, Double.valueOf(value));
|
public boolean | updateFloat(int columnIndex, float value)
return update(columnIndex, Float.valueOf(value));
|
public boolean | updateInt(int columnIndex, int value)
return update(columnIndex, Integer.valueOf(value));
|
public boolean | updateLong(int columnIndex, long value)
return update(columnIndex, Long.valueOf(value));
|
public boolean | updateShort(int columnIndex, short value)
return update(columnIndex, Short.valueOf(value));
|
public boolean | updateString(int columnIndex, java.lang.String value)
return update(columnIndex, value);
|
public boolean | updateToNull(int columnIndex)
return update(columnIndex, null);
|