Rafraichir des données sous Android
Résolu/Fermé
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
-
Modifié par BunoCS le 13/11/2013 à 14:02
roillion Messages postés 11 Date d'inscription mercredi 13 novembre 2013 Statut Membre Dernière intervention 6 mars 2014 - 22 nov. 2013 à 23:55
roillion Messages postés 11 Date d'inscription mercredi 13 novembre 2013 Statut Membre Dernière intervention 6 mars 2014 - 22 nov. 2013 à 23:55
A voir également:
- Comment rafraîchir une page sur android
- Android - Guide
- Comment supprimer une page sur word - Guide
- Android recovery - Guide
- Jouer a pokemon sur android - Guide
- Comment traduire une page - Guide
9 réponses
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
14 nov. 2013 à 21:58
14 nov. 2013 à 21:58
Ok...mais tu ne peux pas utiliser telle quelle la démo.
Le
Il faut plutôt que tu te bases sur cet exemple à mon avis. Dans ton timer, "il suffit" (je mets des guillemets car je ne peux pas tester) de changer ton DataSet et d'appeler un
Apparemment, dans ce code, le graph est updaté via des boutons. Essaie d'y jeter un oeil..
Le
startActivity()te permet, comme son l'indique, de démarrer une activity, ce qui n'est pas ton cas, à moins que je ne me sois trompé depuis le départ... Toi, tu veux afficher un graphe et le mettre à jour toutes les x secondes/minutes)...
Il faut plutôt que tu te bases sur cet exemple à mon avis. Dans ton timer, "il suffit" (je mets des guillemets car je ne peux pas tester) de changer ton DataSet et d'appeler un
repaint()sur ta vuew graph.
Apparemment, dans ce code, le graph est updaté via des boutons. Essaie d'y jeter un oeil..
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
13 nov. 2013 à 14:01
13 nov. 2013 à 14:01
Hello,
Ni l'un ni l'autre.
Il te faut une méthode dédiée à la mise à jour. Celle-ci, tu pourra l'appeler dans le timer. Et le timer, tu pourras le lancer dans le
Note: j'ai édité ton message pour rajouter les balises code (4e icone au-dessus de la zone de texte). Merci d'y penser la prochaine fois ;)
Ni l'un ni l'autre.
Il te faut une méthode dédiée à la mise à jour. Celle-ci, tu pourra l'appeler dans le timer. Et le timer, tu pourras le lancer dans le
onCreate()ou le
onResume()en faisant bien gaffe au fait qu'
onResume()est appelée à chaque fois que l'activity passe en foreground
Note: j'ai édité ton message pour rajouter les balises code (4e icone au-dessus de la zone de texte). Merci d'y penser la prochaine fois ;)
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
13 nov. 2013 à 19:00
13 nov. 2013 à 19:00
Merci de ta réponse !
Sachant que je met à jour mes données avec execute2, j'ai testé ca mais il y a une erreur au chargement.
(avec les balises code ^^)
C'est ce que tu voulais dire ?
Tu sais d'où vient l'erreur ?
Sachant que je met à jour mes données avec execute2, j'ai testé ca mais il y a une erreur au chargement.
(avec les balises code ^^)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
startActivity(intent);
}
protected void onResume ()
{
onPause();//pour mettre l'activité en foreground
//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
intent = chart.execute2(context);
}
},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
5000);
}
}
C'est ce que tu voulais dire ?
Tu sais d'où vient l'erreur ?
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
Modifié par BunoCS le 14/11/2013 à 09:34
Modifié par BunoCS le 14/11/2013 à 09:34
Hello,
Non, évites de faire ça! ;)
Lorsque l'activity est en train de se créer, tu en relances une autre, qui en relance une autre,... D'ailleurs,
Non, ce que je te disais c'est un truc comme ça:
la suite non plus n'est pas bonne:
Et enfin, ceci:
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
startActivity(intent);
}
Non, évites de faire ça! ;)
Lorsque l'activity est en train de se créer, tu en relances une autre, qui en relance une autre,... D'ailleurs,
intentn'est pas déclaré ;)
Non, ce que je te disais c'est un truc comme ça:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
//création et lancement du timer
}
la suite non plus n'est pas bonne:
protected void onResume ()En règle générale, il ne faut pas appeler toi-même les méthodes onTruc(). Ce sont des callbacks appelées automatiquement.
{
onPause();//pour mettre l'activité en foreground
...
}
Et enfin, ceci:
intent = chart.execute2(context);Je ne connais pas ta méthode execute2() mais elle ne devrait pas retourner d'intent. Y'a surement un autre moyen de faire ce que tu veux
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
14 nov. 2013 à 09:34
14 nov. 2013 à 09:34
Désolé, il y a un souci actuellement avec les balises code qui rajoutent des sauts de ligne...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
14 nov. 2013 à 15:21
14 nov. 2013 à 15:21
Bien vu pour le
Je le met ou du coup le
Ok. On lance donc le timer, dans le
Par contre je met quoi dans mon timer ? Je vais pas mettre un
Pour l'instant ca donne ca :
Ma fonction execute2 c'était la même que execute mais avec d'autres données pour voir si la courbe évoluait.
La fonction execute donnait les données de la courbe.
Je dois mettre quoi dans le timer si je dois mettre ni
Merci encore pour ton aide !!
intent;)
Je le met ou du coup le
startActivity(intent);?
Ok. On lance donc le timer, dans le
onCreate()comme tu m'avais dit.
Par contre je met quoi dans mon timer ? Je vais pas mettre un
startActivity(intent);sinon plusieurs fenêtre vont s'ouvrir et la courbe va clignoter.
Pour l'instant ca donne ca :
Ma fonction execute2 c'était la même que execute mais avec d'autres données pour voir si la courbe évoluait.
La fonction execute donnait les données de la courbe.
public Intent execute(Context context) {
String[] titles = new String[] { "Prix" };
long now = Math.round(new Date().getTime() / DAY) * DAY;
List<Date[]> x = new ArrayList<Date[]>();
Date[] dates = new Date[HOURS];
for (int j = 0; j < HOURS; j++) {
dates[j] = new Date(now + (TPS_ENTRE_CHAQUE_POINT * j));
}
x.add(dates);
List<double[]> values = new ArrayList<double[]>();
values.add(new double[] { 23, 24, 25, 23, 24, 21, 26, 23, 23, 25, 26,
27.8, 26, 27.5, 27, 23.2, 24, 23, 23, 23, 23, 23, 23, 23 });
int[] colors = new int[] { Color.RED};
PointStyle[] styles = new PointStyle[] { PointStyle.DIAMOND };
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
int length = renderer.getSeriesRendererCount();
((XYSeriesRenderer) renderer.getSeriesRendererAt(0)).setFillPoints(true);
setChartSettings(renderer, "Matz Hermann", "Heure", "Prix",
x.get(0)[0].getTime(), x.get(0)[HOURS - 1].getTime(), 22, 29, Color.LTGRAY, Color.LTGRAY);
renderer.setXLabels(10);
renderer.setYLabels(10);
renderer.setShowGrid(true);
renderer.setXLabelsAlign(Align.CENTER);
renderer.setYLabelsAlign(Align.RIGHT);
Intent intent = ChartFactory.getTimeChartIntent(context, buildDateDataset(titles, x, values),
renderer, "hh:mm:ss");
return intent;
}
Je dois mettre quoi dans le timer si je dois mettre ni
startActivity(intent);, ni de type intent ?
Merci encore pour ton aide !!
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
14 nov. 2013 à 15:32
14 nov. 2013 à 15:32
Intent intent = ChartFactory.getTimeChartIntent(context, buildDateDataset(titles, x, values),renderer, "hh:mm:ss");C'est quoi, ça? Pourquoi tu as un intent en retour? C'est bizarrement fait...
Je ne comprends pas trop la conception. Pour moi, dans ton activity, tu as un objet de type "graphique" que tu dois mettre à jour tous les x temps. C'est ça?
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
14 nov. 2013 à 21:32
14 nov. 2013 à 21:32
En fait j'utilise la démo de AchartEngine (https://github.com/ddanny/achartengine (la courbe SensorValuesChart) pour tracer la courbe. Il ne reste "plus qu'à" la rafraichir avec des nouvelles données toutes les 5s.
Du coup je ne sais pas trop quoi répondre à tes questions ^^
Oui j'ai bien un type "graphique" que je dois mettre à jour.
Mais si je met
Du coup je ne sais pas quoi mettre dans le timer.
Peut être qu'il faudrait faire un timer dans la méthode execute pour mettre à jour seulement les axes des abscisses et des ordonnées. Mais il faudra toujours rafraichir la courbe. C'est encore le même problème !
Sauf si le onResume() marche dans ce cas là ?
Du coup je ne sais pas trop quoi répondre à tes questions ^^
Oui j'ai bien un type "graphique" que je dois mettre à jour.
Mais si je met
startActivity(intent), ma courbe clignote.
Du coup je ne sais pas quoi mettre dans le timer.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
intent = chart.execute(context);
//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
// ??? //
}
},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
5000);
}
Peut être qu'il faudrait faire un timer dans la méthode execute pour mettre à jour seulement les axes des abscisses et des ordonnées. Mais il faudra toujours rafraichir la courbe. C'est encore le même problème !
Sauf si le onResume() marche dans ce cas là ?
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
15 nov. 2013 à 18:37
15 nov. 2013 à 18:37
Super !! Merci pour ces exemples !
J'ai pris le deuxième exemple qui fonctionne. J'ai plus qu'a enlever les boutons !
Par contre quand je supprime le bouton qui creer une nouvelle série (la ligne 100,101,102,103 et 120,121).
J'ai le message d'erreur : L'application s'est arrêtées...
C'est super bizarre non ? Il vient d'ou le problème ?
J'ai pris le deuxième exemple qui fonctionne. J'ai plus qu'a enlever les boutons !
Par contre quand je supprime le bouton qui creer une nouvelle série (la ligne 100,101,102,103 et 120,121).
J'ai le message d'erreur : L'application s'est arrêtées...
C'est super bizarre non ? Il vient d'ou le problème ?
BunoCS
Messages postés
15495
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
23 octobre 2024
3 909
18 nov. 2013 à 15:28
18 nov. 2013 à 15:28
Yop!
Tu l'as supprimé où le bouton? Dans le XML? Si oui, il doit sûrement rester une référence dans le code.
Tu l'as supprimé où le bouton? Dans le XML? Si oui, il doit sûrement rester une référence dans le code.
roillion
Messages postés
11
Date d'inscription
mercredi 13 novembre 2013
Statut
Membre
Dernière intervention
6 mars 2014
22 nov. 2013 à 23:55
22 nov. 2013 à 23:55
Ouai exact !
Un grand merci pour ton aide BunoCS !
Un grand merci pour ton aide BunoCS !