2012-08-02 8 views
1

미리 알림을 저장할 SQLiteOpenHelper 하위 클래스를 만들었습니다. 다음과 같이 내가이 클래스에서 테이블을 만들 :Android Cursor.getColumnIndex는 -1을 반환합니다.

public static final String TABLE = "Reminders"; 
public static final String ID = "id"; 
public static final String COMPLETE = "complete"; 
public static final String PRIORITY = "priority"; 
public static final String DATE = " alarmdate"; 
public static final String TITLE = "title"; 
public static final String NOTES = "notes"; 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String create = "CREATE TABLE " + TABLE + "(\n" 
      + ID + " INTEGER PRIMARY KEY, \n" 
      + COMPLETE + " INTEGER DEFAULT 0, \n" 
      + PRIORITY + " INTEGER DEFAULT 1, \n" 
      + DATE + " CHAR(21) DEFAULT NULL, \n" 
      + TITLE + " TEXT NOT NULL, \n" 
      + NOTES + " TEXT DEFAULT NULL \n" 
      + ");"; 
    db.execSQL(create); 
} 

데이터베이스가 잘 만들어지고 나는 일반적으로 항목을 추가 할 수 있어요.

문제는 내가 데이터베이스에서 행을 검색 할 때 다른 필드에 대한 올바른 인덱스를 반환하면서, cursor.getColumnIndex (DATE)는, -1 반환한다는 것입니다 :

//Method of the helper class 
public Reminder getReminder(int _id) { 
    Reminder r; 

    SQLiteDatabase db = getReadableDatabase(); 
    String query = String 
      .format("SELECT * FROM %s WHERE ID=%d", TABLE, _id); 
    Cursor cursor = db.rawQuery(query, null); 

    cursor.moveToFirst(); 

    if (cursor.isAfterLast()) 
     return null; 

    boolean complete = (cursor.getInt(cursor.getColumnIndex(COMPLETE)) != 0); 
    int priority = cursor.getInt(cursor.getColumnIndex(PRIORITY)); 
    String dateS = cursor.getString(cursor.getColumnIndex(DATE)); //cursor.getColumnIndex(DATE) returns -1; 

    //etc... 
    cursor.close(); 

이 상당히입니다 귀찮아, getColumnIndex()는 다른 모든 필드에 대해 유효한 인덱스를 반환합니다.

심지어 cursor.getString(cursor.getColumnIndex(DATE)) 대신 cursor.getString(3)을 호출하면 날짜 값이 올바르게 표시됩니다.

이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?

답변

3

" alarmdate"에서 선행 공백을 제거하십시오.

그렇지 않은 경우 CHAR(21)TEXT으로 변경하십시오. 이는 SQLite와 관련하여 정확히 동일한 의미입니다.

+0

감사합니다. 선두 공간이 문제였습니다. 나는 그것을 보지 못했다고 믿을 수 없다. cursor.getColumnIndex ("alarmdate")가 -1을 반환해야한다는 것은 당연한 것입니다. – Gabriel

관련 문제