sql >> Databáze >  >> RDS >> SQLite

android.database.CursorIndexOutOfBoundsException

Pokoušíte se načíst položku na indexu 2, ale tento index ve skutečnosti neexistuje (velikost kurzoru je 2, takže indexy jsou 0,1).

Změňte smyčku:

if (result != null && result.moveToFirst()){
    do {
       Post post = new Post();
       post.setPostId(result.getInt(0));
       posts.add(post);
       ....
    } while (result.moveToNext());
}

Nyní by to mělo fungovat správně.

Poznámka: Nezapomeňte zavolat moveToFirst() metoda, která přesune kurzor do prvního záznamu (implicitně je umístěn před prvním řádkem) a připraví jej pro čtení. Toto je také užitečná metoda pro testování, zda je kurzor platný nebo ne.

Poznámka 2: Nepoužívejte indexy sloupců, můžete jednoduše udělat chybu v počítání. Místo použití názvů sloupců - tento přístup se obecně doporučuje např. cursor.getColumnIndex("<columnName>")



  1. Použijte vázaný parametr vícekrát

  2. Jak uniknout znaku otazníku (?) pomocí Spring JpaRepository

  3. Optimistická souběžnost:IsConcurrencyToken a RowVersion

  4. aktualizace a komprimace databáze sqlite v systému Android