0

そのため、デバイスでアプリを起動するたびに正常に動作しますが、ボタンを押すと、強調表示されたままになる以外は何も実行されず、応答しないというメッセージが表示されます。コードです。OnClickListerner にコードを入れる方法だと思います。パッケージ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.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();
@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);
    set.setOnClickListener(this);

}

public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.bSet:
        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);
            } 
        }
        break;
    }
}

}

4

3 に答える 3

2

onClick メソッド内のすべてが UI スレッドで実行されます。あなたの while ループはアプリをハングさせており、OSは(当然のことながら)アプリを強制的に停止させています。

AsyncTaskを使用して、UI スレッドからコードを取得することを検討してください。不必要な CPU の使用を避けるために、各ループの反復後に一時停止する必要もあります。

于 2012-07-15T00:55:38.617 に答える
0

logcatをチェックしてみましたか?!

于 2012-07-15T22:49:50.173 に答える
0

あなたの時間/分が現在の時刻と一致するwhileまで、メインUIスレッドで基本的に永遠にループします。TimePickerそれが、OS からの ANR メッセージの原因です。

UI スレッドで長時間の操作を実行しないでください。Threads または Handlers または AsyncTasks を使用して、必要な結果を達成します。

于 2012-07-15T01:52:39.723 に答える