2014-11-01 13 views
1

Streaming Audio在線,但總是得到NullPointerException異常每當做水龍頭上BACK按鈕點擊(當playing music)當時只有的MediaPlayer獲得空指針異常時做BACK按鈕

這是line,我在哪裏裏越來越例外UpdateSongTime的Runnable

startTime = mediaPlayer.getCurrentPosition(); // NullPointerException 

代碼如下所示:

 public TextView startTimeField,endTimeField; 
     private double startTime = 0; 
     private double finalTime = 0; 
     private SeekBar seekbar; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_music_player); 

      public void play(View view){   
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      try { 
       mediaPlayer.setDataSource(videoURL); 
      } catch (IllegalArgumentException e) { 
      } catch (SecurityException e) { 
      } catch (IllegalStateException e) { 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (IllegalStateException e) { 
      } catch (IOException e) { 
      } 
      mediaPlayer.start(); 

      finalTime = mediaPlayer.getDuration(); 
       startTime = mediaPlayer.getCurrentPosition(); 
       if(oneTimeOnly == 0){ 
       seekbar.setMax((int) finalTime); 
       oneTimeOnly = 1; 
       } 

       endTimeField.setText(String.format("%dm:%ds", 
       TimeUnit.MILLISECONDS.toMinutes((long) finalTime), 
       TimeUnit.MILLISECONDS.toSeconds((long) finalTime) - 
       TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
       toMinutes((long) finalTime))) 
      ); 
       startTimeField.setText(String.format("%dm:%ds", 
       TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
       TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
       TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
       toMinutes((long) startTime))) 
      ); 
       seekbar.setProgress((int)startTime); 
       myHandler.postDelayed(UpdateSongTime,100); 


      pauseButton.setEnabled(true); 
      playButton.setEnabled(false); 

      mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer arg0) { 
       // TODO Auto-generated method stub 
       pauseButton.setEnabled(false); 
        playButton.setEnabled(true); 
        startTimeField.setText("0m:0s"); 
        seekbar.setProgress(0); 
      } 
     }); 
     } 

     private Runnable UpdateSongTime = new Runnable() { 
       public void run() { 
       startTime = mediaPlayer.getCurrentPosition(); // NullPointerException 

       startTimeField.setText(String.format("%dm:%ds", 
        TimeUnit.MILLISECONDS.toMinutes((long) startTime), 
        TimeUnit.MILLISECONDS.toSeconds((long) startTime) - 
        TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS. 
        toMinutes((long) startTime))) 
       ); 
       seekbar.setProgress((int)startTime); 
       myHandler.postDelayed(this, 100); 
       } 
      }; 

public void pause(View view){  
      mediaPlayer.pause(); 
      pauseButton.setEnabled(false); 
      playButton.setEnabled(true); 
     }  

/** Called just before the activity is destroyed. */ 
     @Override 
     public void onDestroy() { 
      super.onDestroy(); 

       if(mediaPlayer!=null && mediaPlayer.isPlaying()){ 
        mediaPlayer.stop(); 
        mediaPlayer.release(); 
        mediaPlayer = null; 
       }   
     } 

我在代碼中沒有實現什麼?它需要更改我的代碼?

回答

1

你缺少你Activity

onDestroy()去除Handler回調加入這一行你onDestroy()方法

myHandler.removeCallbacks(this); 
+0

太感謝你了:)我將能夠在5分鐘後,接受你的答案和你的伎倆爲我工作---謝謝..我用這個:myHandler.removeCallbacks(UpdateSongTime); – Sophie 2014-11-01 05:13:42

+0

@Sophie ok ..很好它help.you歡迎.. – 2014-11-01 05:19:42

+0

在mediaplayer完成如何重置seekbar到開始位置? – Sophie 2014-11-01 05:23:41