簡體   English   中英

當點擊返回按鈕時,MediaPlayer獲取空指針異常

[英]MediaPlayer getting Null Pointer Exception when do tap on BACK button

在線Streaming Audio但每次僅在那一次點擊“ BACK按鈕( playing music )時,始終會獲得NullPointerException

這是這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;
                }         
        }

我沒有在代碼中實現什么? 需要在我的代碼中進行哪些更改?

您缺少刪除Activity onDestroy()中的Handler回調的方法

在您的onDestroy()方法中添加此行

myHandler.removeCallbacks(this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM