|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
Bonjour,
Mon problème: Mon activité comporte 6 fragments qui comportent plusieurs textview. A partir de mon activité j'aimerai pouvoir afficher des informations dans chacun de ces textview. le problème est que dès que j'envoie une donnée à afficher mon application arrête de fonctionner. Mon application arrête de fonctionner lorsque je met les lignes de code suivantes. Code :
A mon avis ,cette ligne de code ci-dessous doit être modifiée mais je ne sais pas comment le faire. Code :
Autre: Où puis - je trouver les règles à respecter en programmation --> Majuscule au début des méthodes etc... |
||||
|
|
00
|
|
|
#2 |
![]() ![]() |
Pour les "conventions" java c'est là:
http://www.oracle.com/technetwork/ja...oc-136057.html Et c'est justement l'inverse .... ^^ Majuscule au début reservé aux: * Constantes (en fait toute la constante est en majuscules) * Nom de types (Camel Case) '_' interdit Membres, Variables locales & Paramètres: Camel case... minuscule au début
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Étudiant Inscription : octobre 2012 Messages : 92 ![]() |
Salut,
essaye : Code :
textview1 = (TextView) getView().findViewById(R.id.affichage1); |
|
|
00
|
|
|
#4 | ||||||||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
J'ai essayé getView() sans succès.
voici mon code Un thread qui tourne en tache de fond envoi une information a un handler qui vient lancer une méthode qui affiche dans mes différents fragments n’hésitai pas à me dire si cette façon de procéder est bonne ou si il faut que je la modifie. Code :
Code :
j'ai testé plusieurs fois mon code en passant les lignes de code en commentaire au fur et à mesure et la ligne qui fait planter mon application c'est la suivante: Code :
soit: Code :
|
||||||||
|
|
00
|
|
|
#5 |
![]() ![]() |
Moi je pense surtout que tu as un problème de conception...
Code :
02-27 16:43:09.617: W/dalvikvm(1958): threadid=1: thread exiting with uncaught exception (group=0xb616d180) Bref je ne comprends pas le truc.... Normalement la logique c'est: EVENEMENT-1 => Démarrer un thread pour le remplissage-données... à la fin duquel on signale EVENEMENT-2 EVENEMENT-2 => En restant dans le thread-UI: affichage des données... à la fin... on *schedule* EVENEMENT-1 pour dans 500ms onResume() => On lance EVENEMENT-1 onStop() => On vire tous les EVENEMENT-1 en attente
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
Merci necroman pour ta réponse
Mais je suis un débutant en programmation androïd et java et je ne maitrise pas encore les thread. Donc si tu pouvais préciser comment appliquer ton idée cela m'aiderai beaucoup si je comprend ce que tu dis je devrai: Crée un thread qui exécute la méthode remplissageDonnées() et lorsque cela est fait je devrai venir afficher mes données en passant par un autre thread qui est réservé a l'affichage. Puis lorsqu'on visualise le fragment qui affichent les données, on vient rafraichir les données afficher et arrêter le rafraichissement des données lorsqu'on quitte le fragment ( pour passer a un autre fragment par exemple). Problème: Comment fait - on le signal ? j'utilise un Handler? Le thread ui, je vois souvent cela dans les différents tuto mais je ne sait pas comment l'utiliser et a quoi il correspond réellement à part qu'il est réservé a l'affichage de données. J'ai vu quelque exemple de thread ui sur plusieurs forum mais il me paraisse compliquer et pas "top". Pour le sleep(500); je sais qu'il faut éviter cela a tout pris car il bloque l'appli mais je vois pas comment le réaliser autrement. Merci d'avance. |
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Bon... Le "Thread-UI" est l'autre nom donné au thread "principal" (celui du "main" qui a démarré l'application).
Ce thread est utilisé par toute l'UI, d'ou le nom "thread-ui". Quand on est dans une fonction "onXXXXX" de l'activité, on est dans ce thread là. Quand tu crées un "handler", le handler va gérer une liste de message, si poser un message dans un handler peut se faire n'importe ou, l'utilisation du message (l'appel à handleMessage) se fait dans le thread qui a créé le handler... Si celui-ci a été créé par l'activité, il s'agit donc du thread-UI. L'autre interêt du handler, est de pouvoir lui dire: ok poste ce message à tel moment dans le futur .... bien pratique non ? Donc: Code :
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
||
|
|
00
|
|
|
#8 | ||||||||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
Suite à ta remarque necroman (MERCI)
n'ayant pas rafraichi la page du forum je n'ai pas vu ton dernier message de "22h.." donc je suis parti sur ce qui ce trouve ci-dessous. Je vais quand même essayer ta méthode du message de "22h.." que j'ai pas vu. J'ai fait les choses suivantes: Dans la méthode onCreate de mon activité principale, j'ai mis: Code :
donc pour le moment j'utilise Thread.sleep(500); Si tu pouvais me donner la solution pour temporise mon affichage -> Merci ^_^ Dans une autre méthode j'ai mis: Code :
==> ex: test=(TextView)findViewById(R.id.affichage1); test.setText("Cool"); mon appli plante la méthode handler: Code :
Code :
Mon appli tourne sans problème je peux changer de fragment sans que l'appli plante et mes textview sont bien rafraichis (nouvelles données qui s'affichent) Mais je voudrai savoir si mon raisonnement est bon et si je dois faire attention à certaine erreur qui pourrait survenir lorsque je change de fragment (le changement de fragment ce fait en faisant un slide sur la droite ou la gauche) je récupère la position du fragment et en fonction de la position récupérée, je viens afficher les données dans les textview. le problème qui pourrait arriver à mon avis est: Lorsque je viens changer de fragment, ma position change. donc se pourrait- il que lorsque le thread compare la valeur du switch qui contient la position du fragment et que cette position vienne à changer en même temps (Du à un slide). Est-ce-que l'appli pourrait planter? Ai-je raison ? |
||||||||
|
|
00
|
|
|
#9 | ||||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
Après avoir testé ton exemple nicroman, je pense que je vais le garder.
J'ai du créer un deuxième handler pour pouvoir afficher dans mes textview. Je met mon code ci-dessous: Code: Code :
Nicroman, je voulais savoir si je pouvais écrire d'une façon différente le code du 2ème handler (celui qui me permet de lancer la méthode affichageDonnes() soit: m=1; handler1.sendMessage(handler1.obtainMessage(m)); qui m'envoi dans la méthode handler1() Une méthodes qui sert pas a grand chose à part lancer l'affichage. Peut-on faire de cette façon? ou dans le même genre? Je dirai que cela n'est pas possible vue la doc "handler" Code :
|
||||
|
|
00
|
|
|
#10 |
![]() ![]() |
Non ce n'est pas possible
D'ou l'utilisation du runnable REFRESH_UI_TASK ... qui evite toute la gestion du message (et du coup, possibilité de réutiliser le premier handler) Parce-que sur un runnable c'est possible
__________________
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !Et surtout
|
|
|
00
|
|
|
#11 | ||||||||||
|
Invité de passage
![]() Étudiant Inscription : février 2013 Messages : 23 ![]() |
Donc tu veux dire (Nicroman), que je peux réutiliser le même handler pour faire les deux actions que je réalise?
Je doit donc supprime la ligne de code qui ce trouve dans la méthode onCreate(....) et j'utilise le handler suivant: Code :
Code :
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- J'ai du mal à comprendre pourquoi l'appli arrête de fonctionner lorsque à la place de: Code :
Code :
Deuxième problème que j'ai rencontré: Détruire le ou les thread lorsqu'on arrête l'appli Ou mettre le ou les thread en Pause lorsqu'on souhaite juste passer sur une autre appli ou autre. -> Si j'ai bien compris comment fonctionne mon appli - Mon appli possède 2 thread, le premier thread qui tourne en tache de fond et qui réalise les calculs etc. et le deuxième thread qui gère l'affichage. Donc lorsque je souhaite arrêter mon appli, je dois détruire mes thread. ---> Est qu'il y a un ordre à respecter ? ex: détruire le thread ui puis le thread calcul puis ferme l'appli Comment je fais pour détruire un thread qui n'a pas de "Nom" ex: Code :
|
||||||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com