Java 我能';我的线程或循环无法正常运行
所以我整天都在做这个项目,因为我想学习时间选择器,用java和android sdk处理时间。因此,现在我有以下设置:Java 我能';我的线程或循环无法正常运行,java,android,sdk,timepicker,Java,Android,Sdk,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.vi
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;
}
}
当选定的时间到达当前时间时,没有任何事情发生。我的线漏了什么吗?或者说我完全错了。任何帮助都会很好。我知道我今天一直在寻求很多帮助,但我想做的就是学习 我注意到您的代码中有几个错误 1) 不需要单独的线程 2) 不需要while循环,因为如果设置的小时和分钟不等于当前时间,您将进入无限循环 3) 您根本没有使用数字时钟。为什么变量在那里 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小时格式返回时间。如果您的时间选择器设置为24小时格式,那么当您在下午启动应用程序时,它将无法工作。您应该改用日历字段
您还可以将小时和分钟变量打印到文本视图中,以确保它们的值,或者使用调试器将它们与从TimePicker获得的getCurrentXXX()方法进行比较,因为您希望在TimePicker中与它们匹配 人们不想盯着50行代码看。请尽量减少它。我做了更正,什么都没有,添加@Override会给我一个错误,因为onClick方法不是超类,如果我像以前一样忽略它,那么就不需要重写了。请参阅我的编辑和7)上的小更新。