2011-03-29 2 views
0

나는 테이블을 가지고 있으며 거기에는 몇 개의 행이있다. 열은 KEY_ROWIDKEY_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를 비교해야합니까?

답변

0

나는 같은 위해 다음 코드를 작성했습니다 :

/** 
* 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
cursor.moveToPosition(int position); ? 
+0

예, 위치 계산 방법은 어떻게 되나요? –

+0

"WHERE KEY_TITLE IS NOT NULL"쿼리를 수행하면 해당 행 ID를 예를 들어 배열에 저장해야합니다. 배열을 끝내면 커서를 다시 첫 번째 행으로 설정하면됩니다. http://developer.android.com/guide/topics/providers/content- providers.html # querying – olamotte

관련 문제