-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;
        }
    }

選択された時間が現在の時間に達すると、想定どおりに何も起こりません。スレッドに何か不足していますか? または、私はこれを完全に間違っています。どんなヘルプ作業も素晴らしいです。今日、私は多くの助けを求めてきたことを知っていますが、私がしたいのは学ぶことだけです. =)

4

1 に答える 1

2

あなたのコードにいくつかの誤りがあることに気付きました。

1) 別のスレッドの必要はありません。

2) 設定された時間と分が現在の時刻と等しくない場合、そこに無限ループに入るので、while ループは必要ありません。

3) DigitalClock をまったく使用していない。なぜそこに変数があるのですか?

4) whileループに入っても呼び出し中

tp.getCurrentHour().intValue();
tp.getCurrentMinute().intValue();

これらはどの変数にも割り当てられていないため、何の役にも立ちません。

5) if 句の条件が満たされた場合、while ループに入らないため、条件が満たされることはありません。

6) ボタンが 1 つしかないため、スイッチケースは必要ありません。

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 時間形式に設定されている場合、午後にアプリケーションを起動すると機能しません。代わりに、Calendar のHOUR_OF_DAYフィールドを使用する必要があります。

時間と分の変数を textView に出力して値を確認したり、デバッガーを使用して TimePicker の getCurrentXXX() メソッドから取得したものと比較したりすることもできます。

于 2012-07-15T05:50:53.467 に答える