0

MediaPlayer의 메서드에 대해 null 포인터 예외가 계속 발생합니다. 마침내 play 함수를 별도의 메소드로 초기화하고 play 함수를 초기화하여 onClick 리스너 내부에서 해당 메소드를 호출함으로써 play 함수를 작동시킬 수있었습니다.안드로이드에 대한 Mediaplayer의 일시 중지 메서드에 대한 nulll 포인터 예외

그러나 앱 일시 중지 기능에 대해 여전히 null 포인터 예외가 발생합니다. 미디어 플레이어의 일시 정지 방법을 사용하고 있습니다. 작업 일시 중지 방법은 무엇입니까? 문제는 내 코드의 구조와 구성 방법에 달려 있다고 생각합니다.

미디어 플레이어의 초기화를 코드의 다른 위치로 옮겨 보았습니다. 그리고 아무것도 작동하지 않는 것 같습니다. 어떤 아이디어?

// onclick listener for the playing the selected song 
playB.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     playSong(); 
    } 
}); 

// onclick listener for pausing the song that is playing 
pauseB.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     pauseSong(); 
    } 
}); 

// method to pause song 
public void pauseSong(){ 
    player.pause(); 
    length = player.getCurrentPosition(); 
} 

// method to play song and initialize the MediaPlayer class with one file 
// from the drawable folder, need to initialize with something or it will be null 
// for that i decided to use an mp3 in R.raw folder 
public void playSong(){ 
    // Play song 
    MediaPlayer player = MediaPlayer.create(this, R.raw.g2); 
    player.reset(); 
    try { 
     player.setDataSource(selectedAudioPath); 

     player.prepare(); 
    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    player.seekTo(length); 
    player.start(); 
} // play method 

답변

0

MediaPlayer 플레이어 전역 변수를 만들어야합니다. 플레이어가 pauseSong() 메서드에서 보이지 않으므로 nullPointerException이 발생합니다. 메인 클래스에 MediaPlayer 플레이어를 만든 다음 onPlaySong()에서 다음과 같이 초기화하십시오.

player = MediaPlayer.create(this, R.raw.g2); 
+0

그 중 하나가 문제입니다. 감사합니다. – Kevik