我无法使我的线程或循环正常运行

时间:2012-07-15 05:01:36

标签: java android sdk timepicker

所以我整天都在研究这个项目,因为我正在尝试了解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;
        }
    }

当所选时间到达当前时间时,没有任何应该发生的事情发生。我错过了帖子中的内容吗?或者我这样做完全错了。任何帮助工作都很棒。我知道我今天一直在寻求很多帮助,但我想要做的就是学习。 =)

1 个答案:

答案 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中匹配它们。