2011-11-01 21 views
6

Amaciğim basit:Metin gösterimiyle geri sayım

Benim xml dosyasında, textView2 adlı bir metin gösterim var.

İhtiyacım olan bir geri sayımdır, geri sayım 15'den 0'a kadar ve her saniye geçtiğinde, metin görünümü güncellenir (örneğin: 15,14,13,12,11,10,9,8,7, 6,5,4,3,2,1,0).

new CountDownTimer(30000, 1000) { 

     public void onTick(long millisUntilFinished) { 
      int j = (int) millisUntilFinished; 
      TextView textic = (TextView) findViewById(R.id.textView2); 
      textic.setText(j); 
     } 

     public void onFinish() { 

     } 
    }.start(); 
:

Ve geri sayım sayacı sonra bunu, ikinci 14 yaşında ise ben de

gibi it.Something geçerli saati almak gerekir ...

Bu çalıştı

Ancak uygulama çöküyor! Sorun nedir?!

Giriş:

11-01 13: 09: 33,029: UYARI/dalvikvm (388): Konu = 1: 11-01 13:09 yakalanmamış istisna (grup = 0x40015560) ile çıkan iplik: 33.049: ERROR/AndroidRuntime (388): FATAL EXCEPTION: ana 11-01 13: 09: 33.049: HATA/AndroidRuntime (388): java.lang.RuntimeException: etkinliğini başlatılamadı ComponentInfo {think.smart/think .smart.ThinkyoursmartActivity}: java.lang.NullPointerException 11-01 13: 09: 33.049: HATA/AndroidRuntime (388): android.app.Ac tivityThread.performLaunchActivity (ActivityThread.java:1647) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1663) 11-01 13:09 : 33.049: ERROR/AndroidRuntime (388): android.app.ActivityThread.access (1500: 00). ActivityThread $ H.handleMessage (ActivityThread.java:931) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): android.os.Handler.dispatchMessage (Handler.java:99) 11-01 13 : 09: 33.049: ERROR/AndroidRuntime (388): 'da android.os.Looper.loop (Looper.java:123) 11-01 13: 09: 33.049: HATA/AndroidR zaman aşımı (388): android.app.ActivityThread.main (ActivityThread.java:3683) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): adresinden java.lang.reflect.Method.invokeNative (Native Method) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): java.lang.reflect.Method.invoke (Yöntem.java:507) 11-01 13: 09: 33.049: HATA/AndroidRuntime (388): com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): com.android adresinde. internal.os.ZygoteInit.main (ZygoteInit.java:597) 11-01 13: 09: 33.049: ERROR/AndroidRuntime (388): dalvik.system.NativeStart.main (Yerel Yöntem) 11-01 13:09 : 33.049: HATA/AndroidRuntime (388): java.lang.NullPointerException 11-01: 13: 09: HATA/AndroidRuntime (388): think.smart.ThinkyoursmartActivity.onCreate (ThinkyoursmartActivity.java:34) en 33.049 tarafından neden 11-01 13: 09: 33,049: HATA/AndroidRuntime (388): android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) en 11-01 13: 09: 33,049: HATA/AndroidRuntime (388): en android.app.ActivityThread.performLaunchActivity (ActivityThread.java: 1611)

+1

[CountDownTimers] 'a bakın (http://developer.android.com/reference/android/os/CountDownTimer.html). Bu muhtemelen hayatınızı çok daha kolaylaştıracaktır. –

cevap

15

bu deneyin: ----

TextView textic = (TextView) findViewById(R.id.textView2); 

CountDownTimer Count = new CountDownTimer(30000, 1000) { 
    public void onTick(long millisUntilFinished) { 
     textic.setText("Seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     textic.setText("Finished"); 
    } 
}; 

Count.start(); 
+3

Sadece @ Onları geçersiz kılarak çalışmak için onTick ve onFinish yöntemlerini kullanabilirim. Gerçekten de, CountDownT 'u yazmak ve IDE'nizin sizin için tüm kazanları tamamlamasına izin vermek en iyisidir. Ayrıca, kural gereği, 'Count' değişkeninin' count' olması gerekir - bir değişken değil, bir sınıftır. – stackunderflow

1

Ben

böylece aşağıdakileri deneyin UI iş parçacığı dışından UI öğesi güncelleme meselesi olduğunu düşünüyorum:

new CountDownTimer(30000, 1000) { 

public void onTick(long millisUntilFinished) { 
    final int j = (int) millisUntilFinished; 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      TextView textic = (TextView) findViewById(R.id.textView2); 
      textic.setText(j); 
     } 
    }); 
    } 

    public void onFinish() {   
    } 
}.start();