错误-android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0

时间:2014-07-09 02:24:46

标签: android sqlite cursor

我试图在我的应用程序中实现分数功能,但我总是得到主标题中的相同错误,我的错误在以下按钮

     em=bundle.getString("EMAIL");
    SQL usdbh =new SQL (this, "DBUsuarios", null, 1);
    final SQLiteDatabase db = usdbh.getWritableDatabase();
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0)
        {
             Cursor c = db.rawQuery(" SELECT p1,p2,p3,p4,p5 FROM Usuarios WHERE Email='"+em+"' ", null);
                c.moveToFirst();
                    p1= c.getInt(0);

                      p2= c.getInt(1);

                      p3= c.getInt(2);

                     p4= c.getInt(3);

                     p5= c.getInt(4);

                     if(n7>p1){
                      db.execSQL("UPDATE Usuarios SET p1="+n7+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p2="+p1+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p3="+p2+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");

                     }
                     if(n7>p2&&n7<p1){
                      db.execSQL("UPDATE Usuarios SET p2="+n7+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p3="+p2+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");

                     }
                     if(n7>p3&&n7<p2){

                      db.execSQL("UPDATE Usuarios SET p3="+n7+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p4="+p3+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");

                     }
                     if(n7>p4&&n7<p3){


                      db.execSQL("UPDATE Usuarios SET p4="+n7+" WHERE Email='"+em+"' ");
                      db.execSQL("UPDATE Usuarios SET p5="+p4+" WHERE Email='"+em+"' ");

                     }
                     if(n7>p5&&n7<p4){


                      db.execSQL("UPDATE Usuarios SET p5="+n7+" WHERE Email='"+em+"' ");

                     }

             c.close();
                Intent intent2 = new Intent(Cinco.this, MainActivity.class);
                    Bundle b = new Bundle();
                    b.putInt("PUNT", n7);
                    intent2.putExtras(b);
                    startActivity(intent2);
        }
    });

我在MainActivity类中做了相同的光标没有错误,但是它只是将得分放在textViews中它没有将值插入表中

分数正确插入但我总是得到“不幸的是,MyApp已经停止了”。 =( 有任何想法吗? PD =这是我的第一个问题,如果我做错了,请耐心等待=)

1 个答案:

答案 0 :(得分:1)

首先,总是发布整个堆栈跟踪。

其次,您尝试访问没有结果的游标。这导致你崩溃。检查moveToFirst的返回值。如果返回false,则表示没有结果,无需访问它。

此外,永远不要编写带有串联的SQL查询来生成WHERE子句。始终使用绑定变量。使用连接会导致SQL注入风险,并且它会阻止数据库针对通用查询进行优化。