Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android Studio] Timer

Sujet résolu
    18 septembre 2016 à 19:30:18

    Bonjour,

    Je voudrais créer une application grâce à Android Studio, qui aurait le rôle d'un chronomètre précis (au 1/100 de seconde) tout en affichant le temps en direct à l'écran. L'activation et l’arrêt du chrono se font en cliquant n'importe où sur l'écran.

    Je vous passe les détails des fichiers XML, ce n'est sûrement pas de là que l'erreur provient. Voici mon code Java :

    import android.os.CountDownTimer;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    
    public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
        boolean stop = true;
        long startTime;
        final long timeLimit = 36000000L; // Limit to 10 hours
        TextView timeText;
        RelativeLayout mainLayout;
        CountDownTimer timer;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            timeText = (TextView)findViewById(R.id.timetext);
            mainLayout = (RelativeLayout)findViewById(R.id.clickLayout);
            mainLayout.setOnTouchListener(this);
    
    
            timer = new CountDownTimer(timeLimit, 61) {
                public void onTick(long r) {
                    // Running
                    if(!stop) {
                        long millis = System.currentTimeMillis() - startTime;
                        String millisStr = String.valueOf(millis);
    
                        // Display
                        String time = String.valueOf(millis / 1000) + "." + millisStr.substring(millisStr.length() - 2);
                        timeText.setText(time);
                    }
                }
    
                public void onFinish() {
                    // TODO
                }
            }.start();
        }
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (stop) {
                // Restart
                reset();
                startTime = System.currentTimeMillis();
            }
    
            stop = !stop;
            return false;
        }
    
        void reset() {
            timeText.setText("0.00");
        }
    }
    

    Je précise qu'il n'y a aucune erreur ni avertissement lors de la compilation.

    Le résultat est le suivant :

    Voici mon problème : lorsque l'on clique 2 fois sur l'écran trop "rapidement" (intervalle de moins de 0.5s environ), l'application crash.

    D'où pourrait venir le problème ? (Ce n'est pas la rapidité du timer car même si je change la valeur de 61ms à 1000ms, le problème persiste) Peut-être de la fonction onTouch ?

    Problème résolu:


    J'ai compris d'où venait mon problème : du millisStr.substring : il fallait d'abord verifier que millisStr fasse plus de 3 caractères de longueur pour ensuite utiliser substring.

    -
    Edité par Lyght_ 19 septembre 2016 à 8:32:36

    • Partager sur Facebook
    • Partager sur Twitter

    [Android Studio] Timer

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown