7

I have cursor initialized as follows:

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

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


    }

The cursor itself is used in a separate method within the same activity:

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

It gives me the following error:

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

With a stack trace pointing at this line cursorCapital = c.getString(2); every time I rerun the application. It always gives an error there.

The database something like this:

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

I read a couple of similar posts on SO, but they didn't give me an idea of what is going wrong. Any input is appreciated.

user3081519
  • 2,659
  • 5
  • 25
  • 35

1 Answers1

12

The column index of a cursor is zero-based, so change:

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

to

cursorState = c.getString(0);
cursorCapital = c.getString(1);
323go
  • 14,143
  • 6
  • 33
  • 41
Shayan Pourvatan
  • 11,898
  • 4
  • 42
  • 63