1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Uhrzeit anzeigen/updaten

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von mister-viper, 07.09.2011.

  1. mister-viper, 07.09.2011 #1
    mister-viper

    mister-viper Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    Hallo zusammen,

    ich übe mich gerade etwas in Androidprogrammierung und habe mir
    überlegt, dass ich zum Üben einfach mal ein Programm mit verschiedenen Funktionen schreibe.

    Nun zu meinem Problem.

    Ich habe eine Activity "Uhrzeit anzeigen" welche über einen Button aus der
    MainActivity aufgerufen wird. Diese Activity soll nichts anderes machen, als immer die aktuelle Uhrzeit anzeigen. Also nicht nur die Uhrzeit, als die Activity gestartet wurde, sondern die Uhrzeit soll auch dauernd geupdatet werden (also jede Sekunde).

    Das updaten der Uhr realisiere ich in einem extra Thread.

    Problem: Wenn die Acitivity aufgerufen wird, wird auch kurz die Uhrzeit anzeigt. Danach stürzt die Activity jedoch ab.

    Hier mal mein SourceCode. Kann mir jemand sagen, was ich falsch mache?

    Code:
    public class UhrAnzeigen extends Activity {
    
        TextView time;
        Date currentTime;
        Thread timeThread = null;
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.uhr_anzeigen);
    
            time = (TextView)findViewById(R.id.uhr_id_angezeigteUhrzeit);
            timeThread = new Thread(){
                public void run(){
                        while(true){
                            currentTime = new Date(System.currentTimeMillis());                
                            time.setText(currentTime.toString());
                            try{
                                sleep(1000); // update every second
                            } catch (Exception e){
                                // nothing
                            }
                        }
    
                }
            };
            timeThread.start();       
        }
        
    }
    
    
     
  2. DieGoldeneMitte, 07.09.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Standardproblem: Man darf UI Elemente nur aus dem UI Thread heraus verändern.
    (Das steht auch im Stacktrace so)

    Lösung: Handler benutzen. (Beispielcode gibt es in jedem zweiten Thread hier :flapper:)
     
  3. mister-viper, 07.09.2011 #3
    mister-viper

    mister-viper Threadstarter Junior Mitglied

    Beiträge:
    38
    Erhaltene Danke:
    0
    Registriert seit:
    23.03.2011
    OK danke. Ich mach mich mal schlau und gucke weiter :)
     
  4. Tom299, 08.09.2011 #4
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    das problem hatte ich auch schon, nur bin ich mit handler nicht weitergekommen.

    am einfachsten (meiner meinung nach) geht es so:

    entweder:
    Code:
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    time.setText(currentTime.toString());
                }
            }
    
    oder:
    Code:
            time.post(new Runnable() {
                @Override
                public void run() {
                    time.setText(currentTime.toString());
                }
            });
    
    wenn du nur 1 feld aktualisieren mußt, kannst du die 2. methode nehmen, aber wenn du mehrere felder aktualisierst, würde ich die 1. methode nehmen, weil das übersichtlicher ist und du die zusätzlichen views einfach drunter schreiben kannst, also im gleichen runnable.
     

Diese Seite empfehlen