2014-07-09 3 views
0

Im essayant d'implémenter une fonctionnalité de score dans mon application mais j'obtiens toujours la même erreur qui est dans le titre principal, mon erreur est la suivante boutonERROR-android.database.CursorIndexOutOfBoundsException: index 0 demandé, avec une taille de 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); 
     } 
    }); 

Je l'ai fait le même curseur même à la classe MainActivity sans erreur, mais juste frappé légèrement les scores dans textViews il na pas insérer des valeurs dans les tables

les scores sont insérés correctement mais je reçois toujours "Malheureusement, MyApp s'est arrêté." = ( PD = ceci est ma première question alors soyez pattient si j'ai fait quelque chose de mal =)

+0

Il est clairement dit que vous accédez à la 0ème position dans votre tableau où il n'y a aucun élément qui est ce que 'ArrayIndexOutOfBoundException' est. Regardez dans votre trace de pile sur quelle ligne cela se passe ou affichez votre trace de pile ici, puis modifiez votre logique en conséquence. –

Répondre

1

Tout d'abord, postez toujours la trace entière de la pile.

Deuxièmement, vous avez essayé d'accéder à un curseur sans résultat. Cela vous a fait planter. Vérifiez la valeur de retour de moveToFirst. Si elle renvoie false, vous n'avez aucun résultat et vous ne devez pas y accéder.

De plus, NE JAMAIS écrire une requête SQL avec concaténation pour créer la clause WHERE. Toujours utiliser des variables de liaison. L'utilisation de la concaténation vous expose à des risques d'injection SQL et empêche l'optimisation de la base de données pour la requête généralisée.

+0

Hey j'ai vérifié la valeur de retour de la c.moveToFirst de cette façon si (c.moveToFirst) 'et ensuite les commandes d'insertion. Il fait les actions demandées par ces commandes donc la valeur de retour doit être vraie, aucune idée ?, Je continue d'avoir la même erreur = ( – user3818614

Questions connexes