2013-04-26 2 views
0

В принципе у меня есть это:Cursor # GetType() является Index Out Of Bounds

Cursor cur = ... 
for (int i = 0; i < cur.getColumnCount(); i++) { 
    String name = cur.getColumnName(i); 
    Log.d("dao",name); 
    int type = cur.getType(i); 

... и получать в getType() вызова выше исключений. Имя столбца зарегистрировано правильно.

ОШИБКА AndroidRuntime Вызванный: android.database.CursorIndexOutOfBoundsException: индекс -1 запрошенного, с размером 0

+0

возможно дубликат [cursor.getType() и исключение CursorIndexOutOfBoundsException] (http://stackoverflow.com/questions/8133784/cursor-gettype-and-cursorindexoutofboundsexception-exception) –

ответ

1

Это свойство базы данных SQLite, которая использует динамическую типизацию. Проверьте также this. Почему бы вам не использовать:

Cursor cur = ... 

if (cursor != null) { 
    while (cursor.moveToNext()) { 
     String name = cur.getColumnName(i); 
     int type = cur.getType(i); 
     ... 
    } 
} 

Таким образом, вы спрашиваете только для типа, если строка существует.

Если вам нужно столбец типа независимо от каких-либо результатов, вы можете использовать:

String tableName = "..."; 
Cursor cursor = rawQuery("pragma table_info(" +tableName +")"); 
String type = getString(0); 
String name = getString(1); 

Надеется, что это помогает ... Ура!

+0

я действительно сделал анализы, но я Жду» t опубликуйте его. В моих тестах Cursor произошла ошибка. В любом случае, спасибо за объяснение. – PeterMmm