为什么这不起作用? android不允许构造函数吗?

时间:2011-10-21 05:44:00

标签: android class constructor timer android-intent

我很奇怪为什么这段代码不起作用。是因为构造函数吗?

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没有问题。当我添加公共Clock Main和SecondsTask类时,它停止运行。请帮忙。如果有一个更好的方法来做这个特定的android,我很想学习它,或者如果我错过了一些我也想知道的东西。

2 个答案:

答案 0 :(得分:3)

而不是在构造函数中传递int seconds, 您应该通过IntentonCreate()的{​​{1}}传递它,然后您就可以开始并安排此Activity的计时器。

Activity可能会被视为onCreate()的构造函数。

答案 1 :(得分:0)

我认为,问题在于你的SecondsTask run()方法中正在更新的视图。 TimerTask在一个单独的线程中运行。在android中,只有主线程可以更新UI。您正在从工作线程更新UI。因此,从此run方法中删除该UI更新任务。要更新UI,请使用Handlers或runOnUiThread方法... 我希望你能得到asnswer ....