我目前的应用程序的目的是获取手机的当前时间,将其与我设置的时间范围列表进行比较,并查看我当前时间和时间范围之间的剩余时间(所以我需要每秒刷新一次视图。)
示例:当前时间=晚上11点 时间范围A =晚上11:10
我想查看:
x = 11h
A = 11h10min
view ( x); // refreshing each seconds
view ( A- x); // refreshing each seconds
目前我已经成功地查看了当前的时间:
public class HoraireTempsReel extends Activity {
private TextView tvDisplayTime;
private int hour;
private int minute;
private String CurTime;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.horairetempsreel);
setCurrentTimeOnView();
}
// display current time
public void setCurrentTimeOnView() {
tvDisplayTime = (TextView) findViewById(R.id.tvTime);
final Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
// set current time into textview
Resources CurTimeRes = getResources();
CurTime = CurTimeRes.getString(R.string.CurTime,hour,minute);
tvDisplayTime.setText(CurTime);
}
}
但是我没有成功地让它每秒都刷新一次。 我已经完成了一些研究,我发现使用处理程序可能是一个解决方案,但这个概念有点难以理解(我在android开发中是初学者)所以我想知道是否有另一个解决问题的方法。
(抱歉我的英文不好,我不是本地人)
更新 谢谢你回答Salauyou!
首先,将日期时间变量保持为整数或者是一种不好的方式 字符串。 Java中有一个名为Date的专门类 目的
好的,我会尽快尝试改变。
并且不要依赖默认的语言环境!
你是什么意思?
现在您的计时器已经安排好并将执行您的计时器 每1秒setCurrentTimeOnView()方法,直到你取消它 timer.cancel()
好的,我试图调整你给我的代码到我的程序,它给出了类似的东西:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.horairetempsreel);
Timer timer = new Timer();
timer.schedule(new TimerTask(){ // set a TimerTask
@Override
public void run(){ // override its run() method
setCurrentTimeOnView();
}
}, 0, 1000);
}
我不知道把timer.cancel()放在哪里,它给我一个关于logcat的错误:
E / AndroidRuntime(7701):android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。