Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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:Canned';t在客户端打开文件;错误(-38,0)及更多_Android_Android Mediaplayer - Fatal编程技术网

Android MediaPlayer:Canned';t在客户端打开文件;错误(-38,0)及更多

Android MediaPlayer:Canned';t在客户端打开文件;错误(-38,0)及更多,android,android-mediaplayer,Android,Android Mediaplayer,我正在学习Android,我创建了一个有两个按钮的活动:一个按钮(播放/暂停)和一个按钮(下一个)。我有两首歌曲想在按下Next时循环播放。我有一个数组 int[]songs={R.raw.song1,R.raw.song2} 我在我的活动中忽略了这一点。第一首歌唱得很好;但按“下一步”后,出现以下错误: 无法在客户端打开文件,正在尝试服务器端 E/MediaPlayer(3107):在状态4中调用启动 E/MediaPlayer(3107):错误(-38,0) E/MediaPlayer(31

我正在学习Android,我创建了一个有两个按钮的活动:一个按钮(播放/暂停)和一个按钮(下一个)。我有两首歌曲想在按下Next时循环播放。我有一个数组

int[]songs={R.raw.song1,R.raw.song2}

我在我的活动中忽略了这一点。第一首歌唱得很好;但按“下一步”后,出现以下错误:

无法在客户端打开文件,正在尝试服务器端

E/MediaPlayer(3107):在状态4中调用启动

E/MediaPlayer(3107):错误(-38,0)

E/MediaPlayer(3107):错误(-38,0)

E/MediaPlayer(3107):错误(1,-2147483648)

E/MediaPlayer(3107):错误(1,-2147483648)

在onCreate(Bundle…)中

下面是我的onClick(视图v)方法:

基本上,每次按下“下一步”按钮,我都会这样做: -重置mp(即MediaPlayer对象) -为播放下一首歌曲设置新的数据源 -启动mp

至于使用
setOnPreparedListener
prepareAsync
,我读到了


我哪里出错了?

我相信您将数据源设置错了

将其更改为:

mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));

注意包名后面的斜杠。

是的,没有注意到!另外,我将
prepareAsync
替换为
prepare()
,因为我是从文件(而不是流)播放的。谢谢可能重复的
public void onClick(View view) {    
    Log.v(TAG,"ID:"+view.getId());
    switch (view.getId()) {
    case R.id.playerbutton:  //ToggleButton
        if(state==0) {
            mp.start();
            state=1;
        }
        else if(state==1) {
            state=0;
            mp.pause();
        }   
    break;

    case R.id.next:  //Next button
        Log.v(TAG,"Next button pressed!");
        count=(count+1)%2;  //Have only two songs
        mp.reset();
        try {
            mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp"+songs[count]));
            mp.setOnPreparedListener(this);
            mp.prepareAsync();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        mp.start();
    break;
    }
}
mp.setDataSource(this, Uri.parse("android.resource://com.example.myfirstapp/"+songs[count]));