1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
| class RunDataBase extends AsyncTask<Context,ArrayList,Boolean>{
//référence faible à l'activité
private WeakReference<Stats> mStats = null;
Context context;
public RunDataBase(Stats statsActivity){
link(statsActivity);
}
@Override
protected void onPreExecute () {
// Au lancement, on ne fait rien
}
//méthode qui effectue les tâches en background, aucune tâche n'est executée dans l'UI Thread dans cette méthode
@Override
protected Boolean doInBackground(Context... params) {
try{
ArrayList<Integer> tabStatsComplet = new ArrayList<Integer>();
ArrayList<Integer> tabNbrJours = new ArrayList<Integer>();
//Utilitaire pour trouver combien de ligne comporte la base de données
DatabaseUtils dataUtils = new DatabaseUtils();
nbrRow = dataUtils.queryNumEntries(jourdb.getBDD(),TABLE);
//On parcourt tout le tableau des niveaux
for (int i = 0; i < tab.length; i++) {
//on définit le niveau en cours
float niveau = tab[i];
//on récupère le nombre de jour du niveau
int nbrOfDays = jourdb.getAllLevelDays(niveau);
//ajout du nombre de jour au tableau
tabNbrJours.add(nbrOfDays);
//on parcourt tout les jours du niveau pour trouver la somme de traction effectuée
for (int j = 1; j < nbrOfDays+1; j++) {
//on prend le jour i
Jours jour = jourdb.getJoursWithIDAndLevel(j,niveau);
//on ajoute la somme de traction dans un tableau
tabStatsComplet.add(jour.getTotal());
}
}
//on appelle la méthode onProgress
publishProgress(tabStatsComplet, tabNbrJours); //On passe ici les deux arrayList à la méthode onProgress
return true;
}catch(Exception e){
Log.w("Erreur", e.getMessage().toString());
return false;
}
}
@Override
protected void onProgressUpdate(ArrayList... values) {
super.onProgressUpdate(values);
//on doit appeler la méthode pour construire les graphiques
ArrayList<BarEntry> entries = new ArrayList<BarEntry>();
int indexOftabAllPullUp = 0;
//pour chaque niveau nous faisons
for(int i = 0 ; i < tab.length; i++){
//pour chaque niveau nous parcourons le nombre de jour dans ce niveau
int nbrDeJours = values[1].get(0); //values[1] ici devrait être = au second tableau
//ArrayList pour l'axe des X
ArrayList<String> m = new ArrayList<String>();
//ici la boucle pour parcourir le nombre de jours
for(int j = 0 ; j < nbrDeJours; j++ ){
entries.add(new BarEntry(values[0].get(indexOftabAllPullUp), j)); //ici je souhaite ajouter le int contenu dans le premier tableau, mais j'ai une erreur qui me dit qu'il souhaite un int et non un Objet
//on augemente l'index chauque fois que l'on rajoute un jour
indexOftabAllPullUp++;
//Ajoute les valeurs a l'axe X
m.add(""+j+1);
}//for j
BarDataSet d = new BarDataSet( entries, "Niveau " + tab[i]);
d.setBarSpacePercent(20f);
if(compteur == 1){
d.setColor(getResources().getColor(R.color.action_bar));
compteur = 0;
}//if
else{
d.setColor(getResources().getColor(R.color.bg));
compteur = 1;
}//else
//couleur du fond de la barre
d.setBarShadowColor(Color.rgb(203, 203, 203));
ArrayList<BarDataSet> sets = new ArrayList<BarDataSet>();
sets.add(d);
BarData cd = new BarData(m, sets);
//ajoute le graph à la listView
list.add(cd);
}
@Override
protected void onPostExecute (Boolean result) {
if(result){
jourdb.close();
}
else{
Toast.makeText(mStats.get(), "Erreur dans l'affichage des statistiques", Toast.LENGTH_SHORT).show();
}
}
public void link(Stats statsActivity){
mStats = new WeakReference<Stats>(statsActivity);
}
}//class statique RunDataBAse |
Partager