0

トグルボタンをチェックしたときに1秒間隔でループする音を設定しようとしています。そのために非同期タスクを作成しようとしましたが、このアクティビティを開くとクラッシュするのはなぜですか?トグルボタンがチェックされているときに1秒間隔でループ音を出すにはどうすればよいですか?

AlexanderFoxによって解決されました

私の現在のJavaコード:

    final ToggleButton metronomepp = (ToggleButton) findViewById (R.id.metronomepp);
    metronomepp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.i("Metronome", "InWhile");

                if(isChecked) {
                    currentTask = new TimerTask() {
                        @Override
                        public void run() {
                            if (metronome.isPlaying()) { metronome.pause(); }
                            metronome.seekTo(0);
                            metronome.start();
                        }
                    };
                    myTimer.schedule(currentTask, 0, 1000); 
                } else {
                    currentTask.cancel();
               }   
        }
    });

現在、待機時間の変更に問題があります。私は二重変数timetwを持っていて、1000をtimetwに変更し、キャストをlongに変更しましたが、アプリでの選択に基づいて時間を変更した場合、トグルボタンをオンにするとアプリがクラッシュします。

4

1 に答える 1

1

無限の「while」ループを使用するのは非常に悪い考えだと思います。これに到達するには、Timerクラスのscheduleメソッドを使用することをお勧めします。このタスクを繰り返す必要がなくなったら、Timerの「cancel」メソッドを呼び出すだけです。

例(修正済み):

private TimerTask currentTask;

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked) {
        currentTask = new TimerTask() {
            @Override
            public void run() {
                if (metronome.isPlaying()) { metronome.pause(); }
                metronome.seekTo(0);
                metronome.start();
            }
        };
        myTimer.schedule(currentTask, 0, 1000); //in this line we tell to repeat sound every second without start delay
    } else {
        currentTask.cancel();
    }
}
于 2013-03-15T08:53:20.117 に答える