Я пытаюсь отложить будильник, нажатие кнопки повтора перезапускает одно и то же действие после предопределенного времени. Однако, когда я нажимаю кнопку повтора, приложение падает, и в logcat мне предоставляется ошибка: java.lang.IllegalStateException
. Вот код, который я использую для отсрочки, Помогите мне найти, где я делаю неправильно, и лучшая альтернатива для его исправления. Спасибо,Перезапуск операции заканчивается на IllegalStateException
public void snoozeup(View view)
{
SharedPreferences sa = getSharedPreferences("SnoozeList", Context.MODE_PRIVATE);
int snox = sa.getInt("SnoozeX",0);
if(snox==2) {
Handler handler = new Handler();
Runnable x = new Runnable() {
@Override
public void run()
{
startActivity(new Intent(Time_Date.this, Time_Date.class));
}
};
handler.postDelayed(x, 120000);
}
else if(snox==3) {
Handler handler = new Handler();
Runnable x = new Runnable() {
@Override
public void run() {
startActivity(new Intent(Time_Date.this, Time_Date.class));
}
};
handler.postDelayed(x, 180000);
}
else if(snox==5) {
Handler handler = new Handler();
Runnable x = new Runnable() {
@Override
public void run() {
startActivity(new Intent(Time_Date.this, Time_Date.class));
}
};
handler.postDelayed(x, 300000);
}
else if(snox==10) {
Handler handler = new Handler();
Runnable x = new Runnable() {
@Override
public void run() {
startActivity(new Intent(Time_Date.this, Time_Date.class));
}
};
handler.postDelayed(x, 600000);
}
else
{
Handler handler = new Handler();
Runnable x = new Runnable() {
@Override
public void run() {
startActivity(new Intent(Time_Date.this, Time_Date.class));
}
};
handler.postDelayed(x, 180000);
}
mp.stop();
mp.release();
voicePlayer.stop();
voicePlayer.release();
songPlayer.stop();
songPlayer.release();
finish();
}
Вот полный трассировки стека:
> java.lang.IllegalStateException
at android.media.MediaPlayer.isPlaying(Native Method)
at zyia.alarm.zyia.zyia.Time_Date$4.run(Time_Date.java:199)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-15 11:49:25.805 1793-1793/zyia.alarm.zyia.zyia I/Process﹕ Sending signal. PID: 1793 SIG: 9
Кроме того, я использую isPlaying()
метод в этой деятельности, а вот как это:
try {
final Handler hlr = new Handler();
final Runnable looper = new Runnable() {
@Override
public void run() {
if (mp != null) {
if (mp.isPlaying()) {
mp.stop();
}
}
mp.start();
}
};
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
hlr.postDelayed(looper, 5000);
}
});
}
catch(IllegalStateException e)
{
e.printStackTrace();
}
Опубликовать полную стопку пожалуйста. –
опубликовать ваш logcat – Rustam
Я отправил полную трассировку стека – OBX