-1

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

and when the selected time reaches the current time nothing happens like it should supposed to. 我在线程中遗漏了什么吗?或者我这样做完全错误。任何帮助工作都很棒。我知道我今天一直在寻求很多帮助,但我只想学习。=)

4

1 回答 1

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

于 2012-07-15T05:50:53.467 回答