【问题标题】:Error: Make sure the Cursor is initialized correctly before accessing data from it?错误:确保游标在访问数据之前已正确初始化?
【发布时间】:2014-04-20 04:27:05
【问题描述】:

我已将光标初始化如下:

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

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


    }

游标本身在同一活动中的单独方法中使用:

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

它给了我以下错误:

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

每次我重新运行应用程序时,都会有一个堆栈跟踪指向这一行 cursorCapital = c.getString(2);。它总是在那里出错。

数据库是这样的:

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

我在 SO 上阅读了几篇类似的帖子,但他们并没有让我知道出了什么问题。任何输入表示赞赏。

【问题讨论】:

    标签: java android sql sqlite


    【解决方案1】:

    游标的列索引是从零开始的,所以改变:

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

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

    【讨论】:

    • 这解决了我的问题。谢谢。不知道它从 0 开始计算列。
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 2015-01-16
    • 2012-05-16
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多