Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.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
Android 如何修复Mediaplayer中的非法状态异常_Android_Android Mediaplayer_Illegalstateexception - Fatal编程技术网

Android 如何修复Mediaplayer中的非法状态异常

Android 如何修复Mediaplayer中的非法状态异常,android,android-mediaplayer,illegalstateexception,Android,Android Mediaplayer,Illegalstateexception,我在McClick中创建了一个listview和MediaPlayer listSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Song s

我在McClick中创建了一个listview和MediaPlayer

        listSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Song song = mAdapter.getItem(position);
            mPlayer = MediaPlayer.create(MainActivity.this, song.getmSongResourceId());
            if (mPlayer != null) {
                mPlayer.release();
            }
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener () {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    mPlayer.start();
                    mPlayer.pause();
                    controller.show(0);
                }
            });

            mPlayer.start(); //error here
            controller.show(0);
        }
    });


@Override
public void start() {
    mPlayer.start();
}

@Override
protected void onStop() {
    super.onStop();
    mPlayer.pause();
    controller.hide();
}
java:432是
mPlayer.start()。
什么是非法状态异常,如何修复?你可能会说我的帖子是重复的,但我不知道如何将it解决方案应用到我的代码中。

试试看

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener () {
    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.start();
        mp.pause();
        controller.show(0);
    }
});

您应该在完成后调用
release()
,而不是在
start()
@bwt之前,您的意思是在onCompletion方法中?一旦您知道您将不再使用它。基本上,一旦mediaplayer实例发布,您就无法对其执行任何操作。为什么要修复问题?同样的问题
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener () {
    @Override
    public void onCompletion(MediaPlayer mp) {
        mp.start();
        mp.pause();
        controller.show(0);
    }
});