IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

ProgressBar erreur Thread


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Par défaut ProgressBar erreur Thread
    Bonjour,

    J'ai une application qui affiche le résultat de plusieurs requêtes. Je change d'activity via onglets (tabwidget). Vue que l'application est très longue j'ai décider de mettre une progressdialog.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class MonActivity extends Activity  implements Runnable{
    private ProgressDialog pd;
     
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.textview);
     
     launchWait();
     
    }
    Méthode launchWait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     public void launchWait() {
    				pd = ProgressDialog.show(this, "Patientez...", "Chargement", true,false);
     
    				Thread thread = new Thread(this);
    				thread.start();
    			}
    Method run:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void run() {
    	//Je récupére les variable placer en paramètre (via onglet) p,  l, id, c			
    lancement(p,  l, id, c);
     
    		                //Une fois l'opération finie, prévenir la boîte de dialogue 
    		                //qu'elle peut se fermer :
    				handler.sendEmptyMessage(0);
    			}
    Handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private Handler handler = new Handler() {
     
    				@Override
    				public void handleMessage(Message msg) {
    		                        //Le handler a reçu une notification
    		                        //On ferme la boîte de dialogue
    		                        //Les bonnes pratiques voudraient qu'on teste le msg ...
    		 			pd.dismiss();
    				}
    			};

    lorsque je lance mon application tout se passe bien ma page de présentation s'affiche sans souci.
    Mais si je vais sur un nouvel onglet (relance la même activity avec de nouveau paramètre) je récupère bien les résultat de ma requête dans un log mais mon application plante.

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Salut,

    Peut-on avoir le message d'erreur ? As tu regarder au débugueur si t'avais pas des variables à null ou des choses comme ça ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Par défaut
    Voici les erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    01-12 14:25:54.802: W/dalvikvm(639): threadid=8: thread exiting with uncaught exception (group=0x4001d800)
    01-12 14:25:54.852: E/AndroidRuntime(639): FATAL EXCEPTION: Thread-9
    01-12 14:25:54.852: E/AndroidRuntime(639): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.widget.TableLayout.requestLayout(TableLayout.java:223)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.view.View.requestLayout(View.java:8125)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.widget.TextView.checkForRelayout(TextView.java:5371)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.widget.TextView.setText(TextView.java:2688)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.widget.TextView.setText(TextView.java:2556)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at android.widget.TextView.setText(TextView.java:2531)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at com.tab.com.MonActivity.getServerData_ss(MonActivity.java:305)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at com.tab.com.MonActivity.getServerData(MonActivity.java:159)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at com.tab.com.MonActivity.lancement(MonActivity.java:87)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at com.tab.com.MonActivity.run(MonActivity.java:358)
    01-12 14:25:54.852: E/AndroidRuntime(639): 	at java.lang.Thread.run(Thread.java:1096)
    01-12 14:25:56.452: E/WindowManager(639): Activity com.tab.com.main has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44fa19e0 that was originally added here
    01-12 14:25:56.452: E/WindowManager(639): android.view.WindowLeaked: Activity com.tab.com.main has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@44fa19e0 that was originally added here
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.ViewRoot.<init>(ViewRoot.java:247)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.Window$LocalWindowManager.addView(Window.java:424)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.Dialog.show(Dialog.java:241)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.ProgressDialog.show(ProgressDialog.java:107)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.ProgressDialog.show(ProgressDialog.java:95)
    01-12 14:25:56.452: E/WindowManager(639): 	at com.tab.com.MonActivity.launchWait(MonActivity.java:332)
    01-12 14:25:56.452: E/WindowManager(639): 	at com.tab.com.MonActivity.onCreate(MonActivity.java:72)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.widget.TabHost.setCurrentTab(TabHost.java:323)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.View.performClick(View.java:2408)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.view.View$PerformClick.run(View.java:8816)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.os.Handler.handleCallback(Handler.java:587)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.os.Looper.loop(Looper.java:123)
    01-12 14:25:56.452: E/WindowManager(639): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    01-12 14:25:56.452: E/WindowManager(639): 	at java.lang.reflect.Method.invokeNative(Native Method)
    01-12 14:25:56.452: E/WindowManager(639): 	at java.lang.reflect.Method.invoke(Method.java:521)
    01-12 14:25:56.452: E/WindowManager(639): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    01-12 14:25:56.452: E/WindowManager(639): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    01-12 14:25:56.452: E/WindowManager(639): 	at dalvik.system.NativeStart.main(Native Method)
    Avant d'avoir le message d'erreur je récupère bien le résultat de mes requêtes.

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Tu peux réexpliquer le cas de test :
    Tu as une application avec plusieurs onglets.
    Dans chaque onglet tu as une activité.
    Sur l'activité de l'onglet1, tu as le chargement d'une tâche longue avec l'affichage d'une progress dialog.
    Pendant le traitement de cette tâche longue, tu change d'onglet, puis tu reviens sur l'onglet1 et là tu as l'erreur.
    C'est ça ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Par défaut
    Donc j'ai des onglets chaque onglet renvoi à la même activity (MonActivity) mais avec des paramètres différants.
    Cette activité réalise une requête puis une autre par rapport au résultat de la premier requête (correspond à la method lancement()).

    C'est à dire que a chaque fois que je clic sur un onglet la page est en gros réactualisé avec des nouveaux paramètres.

    Malheureusement depuis que j'ai mi la ProgressDialog sa ne fonctionne plus. Pourtant je récupère bien le résultat de mes requêtes dans le log.

  6. #6
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    En faite ton erreur provient d'un thread qui essaye de dégager la progressDialog alors que ce n'est pas lui le propriétaire. Il y a donc un conflit et une exception.

    Maintenant, vu que je ne connais pas ton implémentation dans le détail, il faut que tu examine bien si l'instance de l'activité qui créé ta progressdialog est bien la même que celle qui la ferme.

Discussions similaires

  1. Erreur Thread sur Appel dans DLL
    Par Danyel dans le forum VB.NET
    Réponses: 10
    Dernier message: 27/10/2008, 23h57
  2. ProgressBar sans Thread ?
    Par RR instinct dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 27/07/2007, 15h54
  3. [PB] Progressbar avec thread
    Par todier dans le forum C#
    Réponses: 3
    Dernier message: 15/06/2007, 10h46
  4. Fermeture application - Erreur thread
    Par b_lob dans le forum C#
    Réponses: 4
    Dernier message: 23/02/2007, 16h47
  5. [vb2005]Progressbar et thread
    Par stargates dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/06/2006, 07h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo