android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为22

时间:2017-10-05 16:54:25

标签: java android sqlite

我知道有很多关于此异常的主题但是,我希望人们查看我的代码并协助我在哪里出错。

这是我的代码,用于尝试将我的用户输入存储到sqlite数据库,然后传输代码并将其显示在新活动中。任何人都可以告诉我我哪里出错了,为什么会出现这种错误? (标题错误)

   Cursor res = myDb.getAllData();


            StringBuffer buffer = new StringBuffer();

            String getid = res.getString(0);
            String getlt = res.getString(1);
            String getpt = res.getString(2);
            String getqty = res.getString(3);
            String getdur = res.getString(4);
            String getst = res.getString(5);
            String getet = res.getString(6);


            if ( res != null && res.moveToFirst()) {
                do {
                    buffer.append(getid);
                    buffer.append(getlt);
                    buffer.append(getpt);
                    buffer.append(getqty);
                    buffer.append(getdur);
                    buffer.append(getst);
                    buffer.append(getet);
                } while (res.moveToNext());
            }


            Intent TransferData = new Intent(getBaseContext(), screen4.class);
            TransferData.putExtra("ID", getid);
            TransferData.putExtra("LineType", getlt);
            TransferData.putExtra("PackageType", getpt);
            TransferData.putExtra("Quantity", getqty);
            TransferData.putExtra("Duration", getdur);
            TransferData.putExtra("Starttime",getst);
            TransferData.putExtra("endtime", getet);

            startActivity(TransferData);
        }
    });
}

}

ATTEMPT 2 INSIDE DO BLOCK:

 Cursor res = myDb.getAllData();


            StringBuffer buffer = new StringBuffer();


            if ( res != null && res.moveToNext()) {
                do {

                    String getid = res.getString(0);
                    String getlt = res.getString(1);
                    String getpt = res.getString(2);
                    String getqty = res.getString(3);
                    String getdur = res.getString(4);
                    String getst = res.getString(5);
                    String getet = res.getString(6);

                    buffer.append(getid);
                    buffer.append(getlt);
                    buffer.append(getpt);
                    buffer.append(getqty);
                    buffer.append(getdur);
                    buffer.append(getst);
                    buffer.append(getet);

                    Intent TransferData = new Intent(getBaseContext(), screen4.class);
                    TransferData.putExtra("ID", getid);
                    TransferData.putExtra("LineType", getlt);
                    TransferData.putExtra("PackageType", getpt);
                    TransferData.putExtra("Quantity", getqty);
                    TransferData.putExtra("Duration", getdur);
                    TransferData.putExtra("Starttime",getst);
                    TransferData.putExtra("endtime", getet);

                    startActivity(TransferData);

                } while (res.moveToNext());

1 个答案:

答案 0 :(得分:1)

你要做的是不清楚。

在您的代码中有:

 row=4, col=0 k=0 (i=3, j=-1) k=1 (i=3, j=0) k=2 (i=3, j=1) k=3 (i=4, j=-1) 
 k=4 (i=4, j=1) k=5 (i=5, j=-1) **k=6** (i=5, j=0) **k=7** (i=5, j=1) 
 **k=6** (i=4, j=1) **k=7** (i=4, j=2)

我相信他们应该在do区内。

您试图访问列数据而不将String getid = res.getString(0); String getlt = res.getString(1); //bla bla bla 移动到第一个位置。

在阅读Cursor中的任何值之前,您必须致电Cursor#moveToFirst();