# Android Thread



## Laren (3. Mrz 2012)

Hi,

Ich hab mir für ein Androidspiel einen kleinen Counter gebastelt, der eigentlich funktionieren sollte, aber der Handyemulator zählt 1 Sekunde runter und stürzt dann ab. Ich erkenne erlich gesagt das Problem nicht.

Viele Grüße


```
private void starteCountdown()
{
	new Thread(new Runnable() { 
        public void run(){

    Countdown();
        

        }
}).start();

}
private void Countdown()
{
	 Timer timer = new Timer();
     
     TimerTask task = new TimerTask() {
     	
         private int sec=10;
		private int min=10;
		private int stu=0;

		

         public void run() {
           sec--;
           
           if(sec==0&&min!=0)
           {
         	  min--;
         	  sec=60;
           }
           if(sec==0&&min==0&&stu!=0)
           {
         	stu--;
         	min=60;
         	sec=60;
           }
           if(sec==0&&min==0&&stu==0)
           {
         	System.out.println("fertig");
         	 
           }
         	 TextfeldZeit.setText(stu+":"+min+":"+sec);
         
         }
     };
    timer.schedule(task, 0, 1000);
 }
```


----------



## DanZ (3. Mrz 2012)

Du darfst UI Komponenten nur im UI Thread verändern


----------



## Laren (4. Mrz 2012)

Danke dir, ich habs jetzt mal so umgeschrieben, leider immer noch das gleiche.;(


```
public class CountDown implements Runnable{
	private TextView uebergabe;
	
	public CountDown(TextView uebergabe)
	{
		this.uebergabe=uebergabe;
	}
	public void run() {
		
		     Timer timer = new Timer();
		     
		     TimerTask task = new TimerTask() {
		        
		         private int sec=10;
		        private int min=10;
		        private int stu=0;
		 
		        
		 
		         public void run() {
		           sec--;
		           
		           if(sec==0&&min!=0)
		           {
		              min--;
		              sec=60;
		           }
		           if(sec==0&&min==0&&stu!=0)
		           {
		            stu--;
		            min=60;
		            sec=60;
		           }
		           if(sec==0&&min==0&&stu==0)
		           {
		            System.out.println("fertig");
		             
		           }
		             uebergabe.setText(stu+":"+min+":"+sec);
		         
		         }
		     };
		    timer.schedule(task, 0, 1000);
		
	}
```


```
private void starteCountdown()
{
	runOnUiThread(new Thread(new CountDown(TextfeldZeit)));
	
}
```


----------



## DanZ (4. Mrz 2012)

Du setzt den Text ja auch weiterhin im TimerThread.

Versuchs mal so:


```
runOnUiThread(new Runnable() {
            public void run() {
                    uebergabe.setText(stu+":"+min+":"+sec);
            }
     }
```

musst ein paar Variablen final setzen, damit das funktioniert.


----------



## schlingel (4. Mrz 2012)

Du könntest deinen Thread auch als AsyncTask gestalten und in der Methode publishProgress deine Änderungen in der UI tätigen. Da regelt das Framework bereits alles.

Es gibt auch noch die Möglichkeit die Methode post(Runnable) von Views zu verwenden:

also ähnlich der oben vorgeschlagenen Methode:


```
uebergabe.post(new Runnable() {
            public void run() {
                    uebergabe.setText(stu+":"+min+":"+sec);
            });
```


----------

