所以我整天都在研究这个项目,因为我正在尝试了解timePicker并在java和android sdk中处理时间。所以现在我有以下设置:
package com.dicamillo.alarm;
import java.util.Calendar;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DigitalClock;
import android.widget.TextView;
import android.widget.TimePicker;
public class AlarmlockActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
TimePicker tp;
Button set;
int hour;
int minuet;
DigitalClock dc;
Calendar calendar = Calendar.getInstance();
TextView complete;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tp = (TimePicker) findViewById(R.id.tpAlarmTime);
set = (Button) findViewById(R.id.bSet);
dc = (DigitalClock) findViewById(R.id.digitalClock1);
hour = calendar.get(Calendar.HOUR);
minuet = calendar.get(Calendar.MINUTE);
complete = (TextView) findViewById(R.id.tvTest);
set.setOnClickListener(this);
}
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bSet:
Thread alarmstart = new Thread() {
public void run() {
while (tp.getCurrentHour().intValue() != hour
&& tp.getCurrentMinute().intValue() != minuet) {
tp.getCurrentHour().intValue();
tp.getCurrentMinute().intValue();
if (tp.getCurrentHour().intValue() == hour
&& tp.getCurrentMinute().intValue() == minuet) {
MediaPlayer mp = MediaPlayer.create(
AlarmlockActivity.this, R.raw.alarm);
mp.start();
complete.setText("COmpleted!");
}
}
}
};
alarmstart.start();
break;
}
}
当所选时间到达当前时间时,没有任何应该发生的事情发生。我错过了帖子中的内容吗?或者我这样做完全错了。任何帮助工作都很棒。我知道我今天一直在寻求很多帮助,但我想要做的就是学习。 =)
答案 0 :(得分:2)
我发现你的代码中有几个错误。
1)不需要单独的线程。
2)不需要while循环,因为如果设置的小时和分钟不等于当前时间,那么你将进入无限循环。
3)你根本就没有使用DigitalClock。那里的变量为什么?
4)即使你进入了while循环,你也在调用
tp.getCurrentHour().intValue();
tp.getCurrentMinute().intValue();
未分配给任何变量,因此它们没有用处。
5)if子句中的条件永远不会被满足,因为如果满足,你就不会进入while循环。
6)不需要开关盒,因为你只有一个按钮。
7)最后,你在onClick方法中唯一需要的是:
tp.clearFocus();// allows reading the value set if entered by keyboard
if (tp.getCurrentHour().intValue() == hour && tp.getCurrentMinute().intValue() == minuet) {
MediaPlayer mp = MediaPlayer.create(AlarmlockActivity.this, R.raw.alarm);
mp.start();
complete.setText("COmpleted!");
}
我希望您在启动应用程序时也知道时间和分钟,因为如果您不知道启动应用程序的时间,那么您将很难尝试匹配时间选择器中的时间。
编辑: hour = calendar.get(Calendar.HOUR);
将以12小时格式返回您的时间。如果您的TimePicker设置为24小时格式,那么在PM时启动应用程序时它将不起作用。您应该使用日历的HOUR_OF_DAY字段。
您还可以将小时和分钟变量打印到textView以确保它们的值,或者使用调试器将它们与TimePicker中的getCurrentXXX()方法进行比较,因为您希望在TimePicker中匹配它们。