2011-10-21 38 views
0

我很想知道爲什麼這段代碼不起作用。是因爲構造函數嗎?爲什麼不能正常工作? Android不允許構造函數?

import android.os.Bundle; 
import android.view.Window; 
import android.widget.TextView; 
import android.content.Intent; 
import android.app.Activity; 
import java.util.Timer; 
import java.util.TimerTask; 

public class ClockMain extends Activity { 

int Hours; 
int Minutes; 
int Seconds; 

String TimeOfDayS; 

TextView HoursMainV; 
TextView MinutesMainV; 
TextView SecondsMainV; 
TextView TimeOfDayMainV; 

Timer oneSecond; 

public ClockMain(int Seconds) { 
    // TODO Auto-generated constructor stub 
    oneSecond = new Timer(); 
    oneSecond.schedule(new SecondsTask(), Seconds * 1000); 

} 
class SecondsTask extends TimerTask { 
    public void run() { 
     new ClockMain(1); 
     ++Seconds; 
     if(Seconds == 60){ 
      ++Minutes; 
      Seconds = 0; 
      if(Minutes == 60) { 
       ++Hours; 
       Minutes = 0; 
       if(Hours == 12){ 
        if(TimeOfDayS.equals("AM")) { 
         TimeOfDayS = "PM"; 
        } else{ 
         TimeOfDayS = "AM"; 
        } 
        Hours= 0; 
       } 
      } 
     } 
     HoursMainV = (TextView) findViewById(R.id.HoursMainV); 
     HoursMainV.setText(""+Hours); 

     MinutesMainV = (TextView) findViewById(R.id.MinutesMainV); 
     MinutesMainV.setText(":"+Minutes); 

     SecondsMainV = (TextView) findViewById(R.id.SecondsMainV); 
     SecondsMainV.setText(":"+Seconds); 

     TimeOfDayMainV = (TextView) findViewById(R.id.TimeOfDayMainV); 
     TimeOfDayMainV.setText(" "+TimeOfDayS); 
    } 
} 
public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.clock_main); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 

    Bundle extras = getIntent().getExtras(); 
     if (extras == null) { 
      return; 
     } 
    int Hour = extras.getInt("HoursS"); 
    Hour = Hours; 
    int Minute = extras.getInt("MinutesS"); 
    Minute = Minutes; 
    int Second = extras.getInt("SecondsS"); 
    Second = Seconds; 
    String TimeOfDaySs = extras.getString("TimeOfDayS"); 
    TimeOfDaySs = TimeOfDayS; 
    HoursMainV = (TextView) findViewById(R.id.HoursMainV); 
    HoursMainV.setText(""+Hour); 

    MinutesMainV = (TextView) findViewById(R.id.MinutesMainV); 
    MinutesMainV.setText(":"+Minute); 

    SecondsMainV = (TextView) findViewById(R.id.SecondsMainV); 
    SecondsMainV.setText(":"+Second); 

    TimeOfDayMainV = (TextView) findViewById(R.id.TimeOfDayMainV); 
    TimeOfDayMainV.setText(" "+TimeOfDaySs); 
    new ClockMain(1); 

} 
    } 

是的,我確實改變了Manifest,我知道xml沒有問題。當我添加公共時鐘主要和SecondsTask類時,它停止運行。請幫忙。如果有更好的方式來做到這一點特定於android,我很想學習它,或者如果我錯過了一些我也想知道的東西。

+0

如果有更好的方式做到這一點特定於android?首先寫下你正在執行的任務,以及你所面臨的問題。最好了解 –

+0

我試圖創建一個時鐘。只是爲了好玩。 – Pillager225

回答

3

而是在構造函數傳遞int seconds的, 你應該通過它通過Intent並在ActivityonCreate(),然後你就可以開始,並計劃爲此Activity計時器。

onCreate()可能被認爲是Activity的構造函數。

+1

[更多信息](http://stackoverflow.com/questions/3302177/android-activity-constructor-vs-oncreate) –

+0

+1 - 很好的信息。 – user370305

+0

好的。我有點新,所以你能提供一個你在談論什麼的例子嗎?非常感謝你。 – Pillager225

0

我認爲,問題在於您的SecondsTask run()方法中正在更新的視圖。 TimerTask在一個單獨的線程中運行。在android中,只有主線程才能更新UI。您正在從工作線程更新UI。因此,從該運行方法中刪除該UI更新任務。要更新用戶界面,使用處理程序或runOnUiThread方法... 我希望你得到了asnswer ....