Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我能';我的线程或循环无法正常运行_Java_Android_Sdk_Timepicker - Fatal编程技术网

Java 我能';我的线程或循环无法正常运行

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

所以我整天都在做这个项目,因为我想学习时间选择器,用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) 不需要单独的线程

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)上的小更新。