Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 setDataSource()引发IllegalStateException错误_Android_Video_Media Player - Fatal编程技术网

Android MediaPlayer setDataSource()引发IllegalStateException错误

Android MediaPlayer setDataSource()引发IllegalStateException错误,android,video,media-player,Android,Video,Media Player,虽然我使用几乎相同的代码来播放两个视频,但第一个可以完美地工作,而第二个则不行。当我按下“下一个视频”按钮时,程序因以下原因崩溃: WARN/System.err(15726): java.lang.IllegalStateException WARN/System.err(15726): at android.media.MediaPlayer.setDataSource(Native Method) 源代码: 第一个播放代码: mediaPlayer = new Media

虽然我使用几乎相同的代码来播放两个视频,但第一个可以完美地工作,而第二个则不行。当我按下“下一个视频”按钮时,程序因以下原因崩溃:

WARN/System.err(15726): java.lang.IllegalStateException
WARN/System.err(15726):     at android.media.MediaPlayer.setDataSource(Native Method)
源代码:

第一个播放代码:

    mediaPlayer = new MediaPlayer();
    playURI = receiveIntent.getStringExtra("playURI");
    showDebugInfo("play uri "+playURI);
    Log.e("Gplayer on create", "play uri "+playURI);
    try {
        mediaPlayer.setDataSource(playURI);
    } catch (IllegalArgumentException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    } catch (IllegalStateException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    } catch (IOException e) {
        Log.v(LOGTAG, e.getMessage());
        finish();
    }
按下“下一步”按钮时,将运行以下代码:

   String uri = listAdapter.getItem(position).getItem().getFirstResource().getValue();
    showDebugInfo(" Uri "+uri);
    if(mediaPlayer != null){
        mediaPlayer.stop();
    }
    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(uri);
        mediaPlayer.prepareAsync();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        finish();
    }

为什么会发生这种情况?我只检查了两个不同的部分,第一个是新的mediaplayer,第二个是让mediaplayer停止并重置,然后是相同的。

我也有同样的问题

您需要调用
mediaPlayer.reset()在调用第二个视频之前
mediaPlayer.setDataSource(uri)原因是,因为函数
mediaPlayer.setDataSource(uri)只能在空闲状态下调用,并且
mediaPlayer.reset()是将您带到空闲状态的函数


我由此理解,尽管问题有点不同。

“几乎相同的代码”。你能给他们两个都看吗?另外,您如何处理“下一个视频”按钮点击处理程序?你的方式应该是可行的。很多时候,这些类型的错误都与你试图播放的任何媒体的文件权限有关。如果你改变了视频的顺序,那么崩溃的视频会先播放怎么办?是第二个视频总是有问题,还是那个特定的视频?@ChadSchultz它总是第二个视频有问题,而不是特定的。@ThunderRabbit我想这不是为了这个,因为有两个视频A和B,无论我先播放哪个视频,都很好,第二个不好