오디오 파일 재생에서 런타임 예외를 처리하는 방법은 무엇입니까?
-
20-09-2019 - |
문제
클릭 리스너에 오디오 파일을 재생하는 버튼이 있습니다. 오디오 파일이 재생되는 동안 버튼이 계속해서 클릭되면 앱이 충돌합니다. 해결책은 무엇입니까?
다음은 참조를위한 코드입니다.
private OnClickListener btnMercyListener = new OnClickListener()
{
public void onClick(View v)
{
// Toast.makeText(getBaseContext(),
// "Mercy audio file is being played",
// Toast.LENGTH_LONG).show();
if (status==true)
{
mp.stop();
mp.release();
status = false;
}
else
{
mp = MediaPlayer.create(iMEvil.this,R.raw.mercy);
//mp.start();
try{
mp.start();
status= true;
//mp.release();
}catch(NullPointerException e)
{
Log.v("MP error",e.toString());
}
}
mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
mp.release();
status = false;
}
}
);
}
};
해결책
두가지:
1. 충돌 사고를 디버깅하고 실패한 위치를 확인하십시오 (라인).
2. 시도/캐치로 전체 진술을 둘러싸고 간단히 잡아 예외.
코드가 실패한 곳에서 예외 나 더 나은 아이디어가 있다면 코드를 고치는 방법에 대한 조언을 제공하는 것이 훨씬 쉬울 것입니다. 사실, 문제를 해결하기위한 조언조차 필요하지 않을 수도 있습니다. 문제를 혼자서 해결하게 될 수 있으며 자신의 성공의 과일을 거두게됩니다.
의견 당 업데이트 :
문서 미디어 플레이어 OP가보고있는 증상이 주어지면 문제가 무엇인지를 나타냅니다.
재생을 중지하려면 전화하십시오
stop()
. 나중에 미디어를 재생하려면reset()
그리고prepare()
그만큼MediaPlayer
호출하기 전에 개체start()
다시. (create()
전화prepare()
처음으로.)
재생 버튼을 너무 많이 누르면 미디어가 준비된 상태에 있지 않아 예외가 발생할 수 있습니다. 재생 버튼을 비활성화한다는 아이디어는 유효 하며이 상황을 처리해야합니다.
다음은 프로그램이 원하는 일에 대한 설명 코드입니다.
private OnClickListener btnMercyListener = new OnClickListener()
{
public void onClick(View v)
{
if(isPressed)
{
return;
}
isPressed = true;
// create your media player
mp = MediaPlayer.create(iMEvil.this,R.raw.mercy);
// set your listener
mp.setOnCompletionListener(mp.setOnCompletionListener(new OnCompletionListener(){
// @Override
public void onCompletion(MediaPlayer arg0) {
if(!isPressed)
{
return;
}
isPressed = false;
// re-enable your play button
playButton.enable();
// disable the pause button
pauseButton.disable();
mp.release();
mp.prepare();
}
}
);
// disable the play button
playButton.disable();
// enable the pause button
pauseButton.enable();
// start playback
mp.start();
}
};
물론 앱이 충돌하지 않도록 적절한 시도/캐치 문을 가져야하지만이 코드는 무엇을 해야하는지에 대한 일반적인 아이디어를 제공해야합니다.
제휴하지 않습니다 StackOverflow