2017-08-10 2 views
0

Voici mon code:J'ai une erreur dans un fil faisant le temps « run » (mise à jour chaque seconde)

public void run() { 
     try { 
      while (!isInterrupted()) { 
       Thread.sleep(1000); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

        } 
       }); 
      } 
     } catch (InterruptedException e) { 
     } 
    } 
}; 
thread.start(); 

Le Thread est appelé Thread et je veux afficher l'heure dans un TextView appelé TextView. Il y a une erreur dans le Thread car même si l'heure s'affiche dans le TextView, elle ne se met pas à jour toutes les secondes. Merci

+1

Avez-vous essayé le débogage? La question, en tant que telle, est très difficile à répondre. – f1sh

+1

utiliser 'Handler' à la place – Ali

+0

@NejsemNikdo Cochez cette réponse à propos de l'utilisation de Handler: https://stackoverflow.com/a/32640896/3965050 –

Répondre

2

Comme indiqué, vous devez utiliser Handler avec Runnable, voici un exemple avec votre code:

final Handler handler = new Handler(); 
final Runnable task = new Runnable() { 
    @Override 
    public void run() { 
     //Your code 
     handler.postDelayed(this, 1000); 
    } 
}; 
handler.postDelayed(task, 1000); 

En savoir plus sur Handlers, in the doc.

+0

Il montre une erreur "tâche variable" pourrait ne pas avoir été initialisé "on' task' dans le premier 'handler.postDelayed (task, 1000)' (sous mon code) –

+0

Utilisez ceci à la place (j'ai mis à jour l'exemple) –

+0

Merci, maintenant il ne montre pas l'erreur, mais l'horloge dans mon application ne fonctionne toujours pas :( –

2

utilisation Runnable Et Handler

Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 

     Date time = Calendar.getInstance().getTime(); 
     textView.setText(DateFormat.format("hh:mm", time)); 

     handler.postDelayed(this, 1000); 
    } 
}; 

Handler handler = new Handler(); 
handler.post(runnable); 
+0

Che ck qu'il commence à dormir le fil, de sorte que le premier poste devrait être retardé ainsi. –

+0

Je pense qu'il fait ça pour que la tâche s'exécute toutes les secondes, pas qu'il veuille le retarder – Ali

+1

Oui, bien sûr, mais il pourrait mettre le sommeil après l'exécution de son code, le mettre au début c'est juste retarder la première exécution aussi (peut-être met-il déjà des données dans le TextView ?, qui sait ...). Mais là encore, c'est peut-être juste une erreur. Juste une observation. –