Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Make sure the Cursor is initialized correctly before accessing data from it?

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.

like image 581
user3081519 Avatar asked Apr 20 '14 04:04

user3081519


1 Answers

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);
like image 169
Shayan Pourvatan Avatar answered Oct 21 '22 05:10

Shayan Pourvatan