2014-04-20 26 views
6

mam kursor zainicjowany w następujący sposób:Błąd: Upewnij się, że kursor został poprawnie zainicjowany przed uzyskaniem dostępu do danych z niego?

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //...Code, code, code... 

     c = db.query("US_States", null, null, null, null, null, null, null); 


    } 

Sam kursor jest używany w osobnej metody w tej samej działalności:

public void GameStart() 
    { 
     int gameCount = 0; 
     while(gameCount < 5) 
     { 
      cursorEntry = new Random().nextInt(c.getCount()); 
      c.moveToPosition(cursorEntry); 
      cursorState = c.getString(1); 
      cursorCapital = c.getString(2); 
      displayText.setText(cursorState); 

Daje mi następujący błąd:

E/CursorWindow﹕ Failed to read row 20, column 2 from a CursorWindow which has 50 rows, 2 columns. 

Ze śledzeniem stosu wskazującym na tę linię cursorCapital = c.getString(2); za każdym razem, gdy ponownie uruchomię aplikację. Zawsze daje tam błąd.

Something bazie tak:

State|Capital 
Alabama|Montgomery 
Alaska|Juneau 
Arizona|Phoenix 
...The rest of the states 

Czytałem kilka podobnych stanowisk na SO, ale nie dali mi pomysł co jest nie tak. Dowolne wejście jest doceniane.

Odpowiedz

12

Indeks kolumna kursor jest od zera, więc zmiana:

cursorState = c.getString(1); 
cursorCapital = c.getString(2); 

do

cursorState = c.getString(0); 
cursorCapital = c.getString(1); 
+0

To rozwiązać mój problem. Dzięki. Nie wiedziałem, że liczy kolumny od 0. – user3081519

+1

welcome @ user3081519, cieszę się, że mogę pomóc –

Powiązane problemy