Java 计时器onFinish()在另一个片段中崩溃应用程序
所以我有一个计时器和多个片段。如果计时器正在运行,则在片段之间切换时不会出现问题。但是当计时器完成时,如果用户当时在另一个片段中,应用程序就会崩溃 以下是一些日志: 1)Java 计时器onFinish()在另一个片段中崩溃应用程序,java,android,android-fragments,timer,Java,Android,Android Fragments,Timer,所以我有一个计时器和多个片段。如果计时器正在运行,则在片段之间切换时不会出现问题。但是当计时器完成时,如果用户当时在另一个片段中,应用程序就会崩溃 以下是一些日志: 1) E/RingtoneManager:无法打开铃声content://settings/system/notification_sound: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSys
E/RingtoneManager:无法打开铃声content://settings/system/notification_sound: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.Object android.content.Context.getSystemService(java.lang.String)”
2) java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.media.Ringtone.setStreamType(int)”
这是我的onFinish()
:
据我所知,撞车是试图拉响警报的原因。如何解决这个问题
编辑:应该说明我希望计时器继续运行并完成,即使用户在另一个片段中。修改如下:
@Override
public void onFinish() {
timerTextView.setText("00:00");
timerSeekBar.setEnabled(true);
Log.i("Timer", "Finished!");
// Alarm sound for ending
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone timerEnded = RingtoneManager.getRingtone(getApplicationContext(), notification);
timerEnded.setStreamType(AudioManager.STREAM_ALARM);
timerEnded.play();
}
若您希望在用户离开片段时计时器完成,那个么您可以使用onstop并在那个里停止计时器 或者,若您想让计时器在用户回来时暂停,您可以存储剩余的秒数并启动计时器 根据你的情况,我认为你应该读一下这篇文章,然后继续完成这项任务
在从asynctask访问ui之前进行检查。请参阅我应该提到的完整代码,我只有一个活动。如果我使用这个解决方案,我必须使用getActivity().getApplicationContext(),否则单一的getApplicationContext()将无法工作。我没有意识到您正在使用一个片段,很遗憾,它没有。我有一个活动和多个片段。如果im超出此计时器片段,当计时器完成时,它将崩溃。应该说明我希望计时器继续运行并完成,即使用户在另一个片段中。
@Override
public void onFinish() {
timerTextView.setText("00:00");
timerSeekBar.setEnabled(true);
Log.i("Timer", "Finished!");
// Alarm sound for ending
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone timerEnded = RingtoneManager.getRingtone(getApplicationContext(), notification);
timerEnded.setStreamType(AudioManager.STREAM_ALARM);
timerEnded.play();
}