2014-04-20 8 views
6

Ich habe Cursor wie folgt initialisiert:Fehler: Stellen Sie sicher, dass der Cursor korrekt initialisiert ist, bevor Sie auf Daten zugreifen.

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

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


    } 

Der Cursor sich in einem separaten Verfahren innerhalb der gleichen Aktivität verwendet wird:

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); 

Es gibt mir die folgende Fehlermeldung:

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

Mit einem Stack-Trace auf dieser Linie cursorCapital = c.getString(2); jedes Mal, wenn ich die Anwendung erneut ausführen. Es gibt immer einen Fehler dort.

Die Datenbank etwas wie folgt aus:

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

las ich ein paar ähnliche Beiträge auf SO, aber sie haben mich nicht eine Vorstellung davon, was schief läuft. Jede Eingabe wird geschätzt.

Antwort

12

Der Spaltenindex eines Cursors basiert auf Null, so ändern:

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

zu

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

Das ist mein Problem gelöst. Vielen Dank. Wusste nicht, dass es Spalten von 0 zählt. – user3081519

+1

welcome @ user3081519, froh zu helfen –

Verwandte Themen