Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MediaPlayer点击后退按钮时出现空指针异常_Java_Android_Media Player_Android Mediaplayer - Fatal编程技术网

Java MediaPlayer点击后退按钮时出现空指针异常

Java MediaPlayer点击后退按钮时出现空指针异常,java,android,media-player,android-mediaplayer,Java,Android,Media Player,Android Mediaplayer,流式音频在线,但每次点击后退按钮(当播放音乐)时,总是会出现空点异常 这是行,我在UpdateSongTimeRunnable中遇到异常: startTime = mediaPlayer.getCurrentPosition(); // NullPointerException 代码如下所示: public TextView startTimeField,endTimeField; private double startTime = 0;

流式音频
在线,但每次点击
后退
按钮(当
播放音乐
)时,总是会出现空点异常

这是
,我在
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;
                }         
        }

我没有在我的代码中实现什么?需要在我的代码中进行更改的地方

您缺少在
活动的
onDestroy()
中删除
处理程序
回调

ondestory()方法中添加此行

myHandler.removeCallbacks(this);

非常感谢:)5分钟后我就可以接受你的回答了,你的伎俩对我起了作用——谢谢。。我使用了:myHandler.removeCallbacks(UpdateSongTime);mediaplayer完成时如何将seekbar重置为起始位置?@Sophie完成时通过seekbar将seekbar进度设置为零。setProgress(0)@苏菲:好的。。您的onCompleteListener正在呼叫吗?完成后的seekbar位置是什么?如何记录seekbar位置?