2014-07-09 3 views
0

내 앱에 점수 기능을 구현하려고하는데, 항상 메인 제목에있는 것과 동일한 오류가 발생합니다. 내 오류는 다음과 같습니다. 버튼ERROR -android.database.CursorIndexOutOfBoundsException : 인덱스 0이 요청되었습니다. 크기가 0입니다.

 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 클래스에서 같은 같은 커서를했지만 그것은 그냥 점수가 올바르게 삽입

테이블에 값을 삽입 didnt는하지만 항상 얻을 textViews에 점수를 퍼트 "불행히도 MyApp는 중단되었습니다." = ( 어떤 아이디어가 있습니까? PD = 내 첫 번째 질문이므로 뭔가 잘못했을 경우 pattient가됩니다.)

+0

'ArrayIndexOutOfBoundException'이 무엇인지 요소가없는 배열에서 0 번째 위치에 액세스하고 있다는 것은 분명합니다. 스택 트레이스에 어떤 라인이 있는지 살펴 보거나 여기에 스택 트레이스를 게시 한 다음 적절하게 로직을 변경하십시오. –

답변

1

먼저 항상 전체 스택 추적을 게시하십시오.

두 번째로 결과가없는 커서에 액세스하려고했습니다. 이로 인해 충돌이 발생했습니다. moveToFirst의 반환 값을 확인하십시오. false를 반환하면 결과가 없으므로 액세스하지 않아도됩니다.

또한 WHERE 절을 만들기 위해 연결이있는 SQL 쿼리를 작성하지 마십시오. 항상 바인드 변수를 사용하십시오. 병합을 사용하면 SQL 주입 위험이 있으며 db가 일반화 된 쿼리를 최적화하지 못하게합니다.

+0

어이 나는 (c.moveToFirst) '및 그 때 삽입 명령이 경우에 c.moveToFirst의 반환 가치를 검사했다. 그 명령에 의해 요청 된 동작을 수행하므로 반환 값은 true가되어야합니다. 어떤 생각입니까?, 나는 계속 동일한 오류를 얻습니다. = ( – user3818614

관련 문제