Im Timer lässt sich kein settext ausführen

  • 6 Antworten
  • Letztes Antwortdatum
kukuk

kukuk

App-Anbieter (kostenlos)
37
Ich bin hier total am verzweifeln! Hab jetzt endlich einen Anständigen Timer hinbekommen, aber jetzt steh ich vor dem nächsten Problem. Wenn ich meiner Textview einen neuen Text zuweißen will kommt es in der Zeile zu einem Fehler:

Sobald diese Zeile ausgeführt wird, kommt es im Programm zu einem Absturz. textview2.setText("" + Integer.valueOf(min));
Auch das führt zu einem Programm Absturz:
Toast.makeText(Player.this, "" + Integer.valueOf(min) , Toast.LENGTH_LONG).show();
Außerhalb der Run läuft der settext
Die Variable min wird als Integer deklariert:
Code:
public class Player extends Activity {

    public MediaPlayer mplayer;
    private int zaehler = 0;
    private Timer myTimer;
    private Timer zeitschaltuhr;
int min;
int h;
Code:
public void createzeitschaltuhr(int start, int refresh){
    

zaehler = 0;
    zeitschaltuhr = new Timer();
     
    zeitschaltuhr.schedule(new TimerTask() {
        
        @Override
        public void run() {
            TextView textview = (TextView)findViewById(R.id.txtview_hours);
         TextView textview2 = (TextView)findViewById(R.id.txtview_minutes);
         
            zaehler += 1;
            if (zaehler == 1){
                
                if (min == 0 && h == 0){
                    mplayer.stop();
                    zeitschaltuhr.cancel();
                }
                
                zaehler = 0;
                if ( min < 1 && h > 0){
                    min = 59;
                    h -= 1;
                    zaehler = 0;
                    textview.setText("" + Integer.valueOf(h));
                textview2.setText("" + Integer.valueOf(min));
                    
                }else{
                    zaehler = 0;
                    min -= 1;
                    
                    //Toast.makeText(Player.this, "" + Integer.valueOf(min) , Toast.LENGTH_LONG).show();
                    textview2.setText("" + Integer.valueOf(min)); 
          }         
        
    }
         
      
        }
    }, start,refresh); 
}
Hat jemand eine Idee woran das liegt? wenn ich textview2.setText("" + Integer.valueOf(min)); außerhalb des Timers plaziere, funktionierts.
 
Zuletzt bearbeitet:
Und was ist genau die Fehlermeldung!? Funktioniert denn

textview.setText("" + Integer.valueOf(h));
 
Wenn ich die Zeile textview.setText("" + Integer.valueOf(min));
ausklammere und die App starte läuft alles. Ich seh noch im Augenwinkel, das der textviewwert aktualisiert wird bevor der Fehler erscheint
"Music Project" wurde beendet
 
Debugger? Logcat? Richtige Fehlermeldung!? Wenn ich dir helfen soll, brauche ich Infos. Raten kann ich ja wohl schlecht.
Das Aktualisieren der andern TextView funktioniert? Meine Vermutung ist, dass dein Timer die UI blockiert und deine App deshalb abschmiert.

Der ursprüngliche Beitrag von 17:43 Uhr wurde um 17:49 Uhr ergänzt:

Leg in deiner Activity mal zusätzlich einen Handler an und überschreibe die Methode handleMessage. Ungefähr so:

Code:
public Handler mHandler = new Handler() {      public void handleMessage(Message msg) {
        textview2.setText("" + Integer.valueOf(min));     
     }
}
Dort wo du momentan deine TextViews mit setText aufrufst, setzt du folgendes rein:

mHandler.obtainMessage().sendToTarget();
 
  • Danke
Reaktionen: kukuk
Vielen Vielen dank. mit dem Handler funktioniert es.

Ich saß jetzt hier 3 Stunden und habe alles ausporbiert.
 
:thumbsup:
 

Ähnliche Themen

D
Antworten
5
Aufrufe
574
swa00
swa00
BerndFfm
Antworten
7
Aufrufe
1.223
swa00
swa00
Zurück
Oben Unten