Как пройти через все записи базы данных на Android? - PullRequest
0 голосов
/ 29 марта 2011

У меня есть таблица, и там есть некоторое количество строк. Столбцы есть KEY_ROWID и KEY_TITLE. Мне нужно пройти через них один за другим (кроме пустых KEY_TITLE строк), и текущая позиция курсора KEY_ROWID = rowId.

Просто чтобы проиллюстрировать то же самое:

KEY_ROWID    KEY_TITLE
  1           
  3           title3
  4           title4
  5           
  7           title7

rowId равен 4. Пользователь нажимает кнопку, мы должны получить подробную информацию о следующей строке с непустым заголовком, то есть строке 7. Пользователь нажимает ее снова - мы должны получить строку 3 (начиная с начала, когда достигнут конец ).

Как реализовать то же самое? Поверьте, я должен получить все строки, где KEY_TITLE непусто для Курсора. Затем существуют такие методы, как moveToNext, moveToFirst, isLast. Но как я могу установить текущую позицию? Нужно ли мне сначала пройти все строки и сравнить rowIds?

Ответы [ 2 ]

0 голосов
/ 29 марта 2011

Я написал следующий код для того же:

/**
 * Get next record 
 * 
 * @param next possible values are +1 - move forward, -1 - move back
 * @return rowId of the next record
 */    
public long getNextRecord(int next, long rowId) {
    long nextRowId = 0;
    Cursor mCursor = mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_TITLE}, KEY_TITLE + "!=\"\"", null, null, null, null);
    if (mCursor.moveToFirst()) {
        do {
            Log.i(TAG, "rowId/KEY_ROWID/KEY_TITLE: "+rowId+"/"+mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID))+"/"+mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_TITLE)));
            if (mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID)) == rowId) {
                if (!mCursor.move(next)) {
                    // first (-1) or last position
                    if (mCursor.getPosition() == -1) {
                        mCursor.moveToLast();
                    } else {
                        mCursor.moveToFirst();
                    }
                }
                nextRowId = mCursor.getLong(mCursor.getColumnIndexOrThrow(KEY_ROWID));
                break;
            }
        } while (mCursor.moveToNext());
    }
            mCursor.close();
        return nextRowId;
}    

Есть ли лучший / более быстрый способ добиться того же?

0 голосов
/ 29 марта 2011
 cursor.moveToPosition( int position); ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...