2013-01-17 4 views
0

Je remplis AChartEngine à partir de la base de données sqlite et j'ai besoin de toutes les données à afficher. Le problème que j'ai est quand je supprime un enregistrement de la série graphique arrête de peupler à l'enregistrement supprimé. Je dois trouver un moyen d'ignorer les enregistrements supprimés/vides et de continuer à remplir mon graphique. J'ai besoin de le faire de la même manière que listview ignore les enregistrements supprimés et continue d'afficher toutes les lignes. Je suis très novice dans ce domaine et j'ai beaucoup de mal avec ça. J'ai essayé d'écrire si des instructions afin d'ignorer des lignes supprimées/vides mais rien ne semble fonctionner. Merci pour l'aide!Ignorer les lignes supprimées/vides sqlite

dans mon activité graphique:

for (int i = 1; !c.isAfterLast(); i++) { 

     String value1 = db.getValue1(i); 
     String value2 = db.getValue2(i); 

     c.moveToNext(); 

     double x7 = Double.parseDouble(value1); 
     double y7 = Double.parseDouble(value2); 

     myseries.add(x7, y7); 

     } 

Je reçois l'erreur: CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

Si j'entoure avec essayer et l'attraper renseignera les lignes jusqu'à l'enregistrement supprimé.

"EDIT" dans ma base de données SQLite:

public String getValue1(long l) { 
    String[] columns = new String[]{ EMP_DEPT }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c != null){ 
    c.moveToFirst(); 
    String value1 = c.getString(0); 


     return value1; 


    } 
    return null; 
    } 






public String getValue2(long l) { 
    String[] columns = new String[]{ EMP_DATE1 }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c != null){ 
    c.moveToFirst(); 
    String value2 = c.getString(0); 


     return value2; 


    } 
    return null; 
    } 
+0

cela suggère vraiment que quelque chose est fondamentalement mal avec votre installation si la suppression quelque chose dans votre base de données peut affecter votre graphique comme ça. Essentiellement, vous * devez * charger votre série de graphiques à partir d'une requête à la base de données et cette série de graphiques a la responsabilité exclusive de fournir des données à votre graphique. affecter la base de données après qu'elle a été faite ne devrait pas affecter la série de graphiques et donc le graphique. – mango

+0

Le graphique lui-même n'est pas le problème ... Le problème que j'ai est dans la requête et comment je peupler la série. Ce que je suppose que j'ai besoin est une déclaration dans ma requête pour sauter des lignes vides. Regardez la publication mise à jour, j'ai inclus ma requête. – Cgramme

+0

mon point est que l'étape de population et l'étape de suppression doivent être des étapes distinctes de sorte que l'on ne peut jamais entrer en conflit avec l'autre, si les choses sont faites correctement. – mango

Répondre

0

Votre problème est que votre filet de sécurité pour les commandes sur les lignes qui n'existent pas est d'utiliser if (c != null){ puis effectuez vos commandes dans ce bloc, mais une demande Cursor d'une requête ne viendra jamais en null, il sera au lieu de cela entraîner un objet curseur sans lignes.

Une solution plus appropriée à utiliser comme votre filet de sécurité à la place if (c.moveToFirst()){ Parce que la méthode elle-même renvoie un boolean car si la méthode elle-même effectivement réalisée en premier lieu - true si elle a déménagé et false sinon (ce qui se produit quand il y a pas de rangées à emménager). une autre vérification, si vous le souhaitez, serait de voir combien de lignes le curseur a avec c.getCount().

De plus, vous devez combiner vos méthodes afin que vous ne faites pas les requêtes redondantes à la base de données:

public String[] getValues(long l) { 
    String[] results = new String[2]; 
    String[] columns = new String[]{ EMP_DEPT, EMP_DATE1 }; 
    Cursor c = db.query(EMP_TABLE, columns, EMP_ID + "=" + l, null, null, null, null); 
    if (c.moveToFirst()) { 
     results[0] = c.getString(0); 
     results[1] = c.getString(1); 
    } else { 
     Log.d("GET_VALUES", "No results formed from this query!"); 
    } 
    return results; 
} 
+0

Nous vous remercions de votre aide à ce sujet. Je vais certainement devoir combiner les méthodes. Je l'ai eu en travaillant avec un simple essai catch statment mais votre aproch semble mieux. Je vous ferai savoir si cela fonctionne. – Cgramme

0

Vous devez utiliser une seule requête pour obtenir toutes les valeurs à la fois:

SELECT Date1 FROM MyTable WHERE id BETWEEN 1 AND 12345 

ou:

db.query(EMP_TABLE, columns, EMP_ID + " BETWEEN 1 AND " + ..., ...); 

Ensuite, les valeurs manquantes ne s'afficheront pas lorsque vous parcourrez le curseur.

Questions connexes