在数组列表播放下一首歌曲时,Android应用程序强制关闭 [英] Android app force closes when playing next song in array list

查看:730
本文介绍了在数组列表播放下一首歌曲时,Android应用程序强制关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建一个Android应用程序(我自己用的),让我听从GTA V.我最喜爱的歌曲
媒体播放器从我的Dropbox帐户流的MP3曲目,这一切工作正常。

问题是,第一首歌结束后我想,当我运行应用程序的第一首歌播放完的应用程序崩溃,而不是播放下一首歌曲中的列表后,它不过播放下一首歌曲。

有人可以帮我解决这个问题我遇到?

感谢。

code

 公共类channelx扩展活动实现MediaPlayer.On $ P $ {pparedListener    按钮播放,暂停,家庭,刷新;
    保护对话框mSplashDialog;     私人INT playlistPos = 0;
        私人列表<&乌里GT; myUris =新的ArrayList<&乌里GT;();
        私人的MediaPlayer sdrPlayer =新的MediaPlayer();    / **当第一次创建活动调用。 * / @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.channelx);        最后ProgressDialog progressDialog =新ProgressDialog(channelx.this);        progressDialog.setCancelable(假);
        progressDialog.setIndeterminate(真);
        progressDialog.setMessage(正在加载...);
        progressDialog.show();        最后TIMER T =新的Timer();
        t.schedule(新的TimerTask(){
            公共无效的run(){
                progressDialog.dismiss();
                t.cancel();
            }
        },5000);        玩=(按钮)findViewById(R.id.play);
        暂停=(按钮)findViewById(R.id.pause);
        家=(按钮)findViewById(R.id.home);
        刷新=(按钮)findViewById(R.id.refresh);         myUris.add(Uri.parse(https://db.tt/4ANlGRms));
         myUris.add(Uri.parse(https://db.tt/TpmxsqGJ));         myUris.add(Uri.parse(https://db.tt/rbkYtuNI));
         myUris.add(Uri.parse(https://db.tt/JYVHp9nm));
         myUris.add(Uri.parse(https://db.tt/xWLATUQp));
         myUris.add(Uri.parse(https://db.tt/WzV2TzFu));
            //添加其他人也...            initSong(myUris.get(playlistPos));            sdrPlayer.setOnCompletionListener(新OnCompletionListener(){
                公共无效onCompletion(MediaPlayer的MP){
                    sdrPlayer.reset();                    playlistPos ++;
                    initSong(myUris.get(playlistPos));
                    sdrPlayer.start(); //开始一样好,如果你想
                }
            });        play.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                sdrPlayer.start();
            }
        }
        );
        pause.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                sdrPlayer.pause();
            }
        });        home.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){                AlertDialog.Builder助洗剂=新AlertDialog.Builder(channelx.this);
                builder1.setMessage(?你确定你要离开这个站播放将被停止。);
                builder1.setCancelable(真);
                builder1.setPositiveButton(继续,
                新DialogInterface.OnClickListener(){
                    公共无效的onClick(DialogInterface对话,诠释的id){                        sdrPlayer.stop();
                        意向意图=新意图(channelx.this,MainActivity.class);
                        startActivity(意向);
                    }
                });
                builder1.setNegativeButton(取消,
                新DialogInterface.OnClickListener(){
                    公共无效的onClick(DialogInterface对话,诠释的id){
                        dialog.cancel();
                    }
                });                AlertDialog alert11 = builder1.create();
                alert11.show();            }
        });        refresh.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                sdrPlayer.stop();
                意向意图=新意图(channelx.this,channelx.class);
                startActivity(意向);
            }
        });    }    @覆盖
    在prepared(MediaPlayer的MP)公共无效{    }    公共无效initSong(URI myUri){
        尝试{
            sdrPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            sdrPlayer.setDataSource(这一点,myUri);
            。sdrPlayer prepareAsync(); //不要使用prepareAsync MP3播放
        }
        赶上(IOException异常五){            e.printStackTrace();
            Toast.makeText(channelx.this,
                       请打开无线网络,然后再试一次
                       Toast.LENGTH_LONG).show();
        }
    }
}

LogCat中

  15 05-26:37:14.574:D / MediaPlayer的(16744):mIsAboveSense55:-1
05-26 15:37:14.574:D / MediaPlayer的(16744):sense_version:5.5
05-26 15:37:14.574:D / MediaPlayer的(16744):版本S1:55000
05-26 15:37:14.574:D / MediaPlayer的(16744):版本S2:55000
05-26 15:37:14.664:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:37:14.664:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:37:14.694:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:37:14.694:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:37:14.704:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:37:14.704:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:37:14.704:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:37:14.704:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:37:14.754:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:8
05-26 15:37:22.833:W / MediaPlayer的(16744):信息/警告(1,902)
05-26 15:37:22.833:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:22.833:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:5
05-26 15:37:22.833:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:1
05-26 15:37:22.853:E / MediaPlayer的(16744):应该有副标题控制器已经设置
05-26 15:37:24.044:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:37:24.044:D / [MediaPluginDLNA](16744):不镜像模式
05-26 15:37:24.044:D / MediaPlayer的(16744):DOSTART()的
05-26 15:37:24.044:D / MediaPlayer的(16744):Htc_getIntParameter = 902
05-26 15:37:24.184:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:6
05-26 15:37:25.115:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:7
05-26 15:37:26.176:W / MediaPlayer的(16744):信息/警告(703,0)
05-26 15:37:26.176:W / MediaPlayer的(16744):信息/警告(701,0)
05-26 15:37:26.176:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:26.186:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:27.177:W / MediaPlayer的(16744):信息/警告(702,0)
05-26 15:37:27.207:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:28.238:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:7
05-26 15:37:29.370:W / MediaPlayer的(16744):信息/警告(703,0)
05-26 15:37:29.370:W / MediaPlayer的(16744):信息/警告(701,0)
05-26 15:37:29.370:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:29.370:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:30.391:W / MediaPlayer的(16744):信息/警告(702,0)
05-26 15:37:30.401:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:31.412:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:7
05-26 15:37:31.612:W / MediaPlayer的(16744):信息/警告(703,0)
05-26 15:37:31.612:W / MediaPlayer的(16744):信息/警告(701,0)
05-26 15:37:31.612:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:31.612:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:37:32.433:W / MediaPlayer的(16744):信息/警告(702,0)
05-26 15:37:32.433:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:200
05-26 15:39:16.584:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:7
05-26 15:39:16.764:E / MediaPlayer的(16744):内部/外部状态不匹配纠正
05-26 15:39:16.774:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:2
05-26 15:39:16.774:D / MediaPlayer的(16744):复位()的
05-26 15:39:16.814:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.814:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.824:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.864:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:39:16.864:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.894:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:39:16.894:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:39:16.894:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.904:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:39:16.904:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:39:16.904:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:39:16.904:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:39:16.904:D / MediaPlayer的(16744):DOSTART()的
05-26 15:39:16.904:D / MediaPlayer的(16744):Htc_getIntParameter = 0
05-26 15:39:16.904:E / MediaPlayer的(16744):启动名为状态4
05-26 15:39:16.904:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:16.904:D / MediaPlayer的(16744):开始()出
05-26 15:39:16.904:D / MediaPlayer的(16744):U58发送PlaybackCompleteEvent
05-26 15:39:16.924:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:100
05-26 15:39:16.924:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:16.924:D / MediaPlayer的(16744):复位()的
05-26 15:39:16.924:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.924:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.934:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:16.934:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.934:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:39:16.934:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.934:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:39:16.934:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:39:16.934:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.934:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:39:16.934:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:39:16.934:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:39:16.934:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:39:16.934:D / MediaPlayer的(16744):DOSTART()的
05-26 15:39:16.944:D / MediaPlayer的(16744):Htc_getIntParameter = 0
05-26 15:39:16.944:E / MediaPlayer的(16744):启动名为状态4
05-26 15:39:16.944:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:16.944:D / MediaPlayer的(16744):开始()出
05-26 15:39:16.944:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:100
05-26 15:39:16.944:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:16.944:D / MediaPlayer的(16744):复位()的
05-26 15:39:16.944:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.944:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.944:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.944:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:16.955:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:39:16.955:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.965:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:39:16.965:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:39:16.965:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.975:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:39:16.975:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:39:16.975:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:39:16.975:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:39:16.975:D / MediaPlayer的(16744):DOSTART()的
05-26 15:39:16.975:D / MediaPlayer的(16744):Htc_getIntParameter = 0
05-26 15:39:16.975:E / MediaPlayer的(16744):启动名为状态4
05-26 15:39:16.975:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:16.975:D / MediaPlayer的(16744):开始()出
05-26 15:39:16.975:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:100
05-26 15:39:16.975:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:16.975:D / MediaPlayer的(16744):复位()的
05-26 15:39:16.975:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.975:D / MediaPlayer的(16744):reset()的出
05-26 15:39:16.975:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.985:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:16.985:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:39:16.985:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:16.995:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:39:16.995:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:39:16.995:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.995:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:39:16.995:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:39:16.995:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:39:17.005:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:39:17.005:D / MediaPlayer的(16744):DOSTART()的
05-26 15:39:17.005:D / MediaPlayer的(16744):Htc_getIntParameter = 0
05-26 15:39:17.005:E / MediaPlayer的(16744):启动名为状态4
05-26 15:39:17.005:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:17.005:D / MediaPlayer的(16744):开始()出
05-26 15:39:17.005:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:100
05-26 15:39:17.005:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:17.005:D / MediaPlayer的(16744):复位()的
05-26 15:39:17.005:D / MediaPlayer的(16744):reset()的出
05-26 15:39:17.005:D / MediaPlayer的(16744):reset()的出
05-26 15:39:17.005:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:17.015:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:17.015:V / MediaPlayer的(16744):网络类型=无线上网
05-26 15:39:17.015:D / MediaPlayer的(16744):mIsAboveSense55:1
05-26 15:39:17.015:D / MediaPlayer的(16744):可以在客户端无法打开文件,试图服务器端
05-26 15:39:17.025:I / MediaPlayer的(16744):setLPAflag()的
05-26 15:39:17.025:D / MediaPlayer的(16744):SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:17.025:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false +
05-26 15:39:17.025:D / MediaPlayer的(16744):设置AwesomePlayer LPA标志设置为false -
05-26 15:39:17.025:I / MediaPlayer的(16744):setLPAflag()出
05-26 15:39:17.025:D / [MediaPluginDLNA](16744):getIsRegionSupported] sRegion code:6
05-26 15:39:17.025:D / MediaPlayer的(16744):DOSTART()的
05-26 15:39:17.025:D / MediaPlayer的(16744):Htc_getIntParameter = 0
05-26 15:39:17.025:E / MediaPlayer的(16744):启动名为状态4
05-26 15:39:17.025:E / MediaPlayer的(16744):错误(-38,0)
05-26 15:39:17.025:D / MediaPlayer的(16744):开始()出
05-26 15:39:17.025:D / MediaPlayer的(16744):媒体播放器接收到消息,消息类型:100
05-26 15:39:17.025:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:17.025:D / MediaPlayer的(16744):复位()的
05-26 15:39:17.035:D / MediaPlayer的(16744):reset()的出
05-26 15:39:17.035:D / MediaPlayer的(16744):reset()的出
05-26 15:39:17.035:W / dalvikvm(16744):主题ID = 1:螺纹未捕获的异常退出(组= 0x4167de18)
05-26 15:39:17.035:E / MediaPlayer的(16744):错误(1,-107)
05-26 15:39:17.045:E / AndroidRuntime(16744):致命异常:主要
05-26 15:39:17.045:E / AndroidRuntime(16744):工艺:com.example.gtavradio,PID:16744
05-26 15:39:17.045:E / AndroidRuntime(16744):java.lang.IndexOutOfBoundsException:无效指数6,大小为6
05-26 15:39:17.045:E / AndroidRuntime(16744):在java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-26 15:39:17.045:E / AndroidRuntime(16744):在java.util.ArrayList.get(ArrayList.java:308)
05-26 15:39:17.045:E / AndroidRuntime(16744):在com.example.gtavradio.channelx $ 2.onCompletion(channelx.java:75)
05-26 15:39:17.045:E / AndroidRuntime(16744):在android.media.MediaPlayer $ EventHandler.handleMessage(MediaPlayer.java:3162)
05-26 15:39:17.045:E / AndroidRuntime(16744):在android.os.Handler.dispatchMessage(Handler.java:102)
05-26 15:39:17.045:E / AndroidRuntime(16744):在android.os.Looper.loop(Looper.java:157)
05-26 15:39:17.045:E / AndroidRuntime(16744):在android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 15:39:17.045:E / AndroidRuntime(16744):在java.lang.reflect.Method.invokeNative(本机方法)
05-26 15:39:17.045:E / AndroidRuntime(16744):在java.lang.reflect.Method.invoke(Method.java:515)
05-26 15:39:17.045:E / AndroidRuntime(16744):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 15:39:17.045:E / AndroidRuntime(16744):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 15:39:17.045:E / AndroidRuntime(16744):在dalvik.system.NativeStart.main(本机方法)
05-26 15:39:19.918:D /过程(16744):killProcess,PID = 16744
05-26 15:39:19.918:D /过程(16744):$ com.android.internal.os.RuntimeInit UncaughtHandler.uncaughtException:131 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690

编辑:忽略了一些愚蠢的评论对我的code

新的日志

  16 05-26:20:11.884:E / MediaPlayer的(1530):attachNewPlayer称为状态128
05-26 16:20:11.884:W / dalvikvm(1530年):主题ID = 1:螺纹未捕获的异常退出(组= 0x4167de18)
05-26 16:20:11.904:E / AndroidRuntime(1530年):致命异常:主要
05-26 16:20:11.904:E / AndroidRuntime(1530年):工艺:com.example.gtavradio,PID:1530
05-26 16:20:11.904:E / AndroidRuntime(1530年):java.lang.IllegalStateException
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer._setDataSource(本机方法)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:1236)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:1203)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:1137)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在com.example.gtavradio.channelx.initSong(channelx.java:155)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在com.example.gtavradio.channelx $ 2.onCompletion(channelx.java:78)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.media.MediaPlayer $ EventHandler.handleMessage(MediaPlayer.java:3089)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.os.Handler.dispatchMessage(Handler.java:102)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.os.Looper.loop(Looper.java:157)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在java.lang.reflect.Method.invokeNative(本机方法)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在java.lang.reflect.Method.invoke(Method.java:515)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 16:20:11.904:E / AndroidRuntime(1530年):在dalvik.system.NativeStart.main(本机方法)

修改此code现在不会崩溃的应用程序,但它仍然不能自动播放下一首歌曲,我一定要重新preSS发挥让它播放下一首歌曲

  sdrPlayer.setOnCompletionListener(新OnCompletionListener(){
                公共无效onCompletion(MediaPlayer的MP){
                    sdrPlayer.stop();
                            sdrPlayer.reset();
                    playlistPos ++;
                    如果(playlistPos == myUris.size()){
                        playlistPos = 0;
                    }
                    initSong(myUris.get(playlistPos));                    //sdrPlayer.start(); //开始一样好,如果你想
                }
            });


解决方案

您已经有了一个数组索引越界异常 - 我认为这是由

引起的

  playlistPos ++;
initSong(myUris.get(playlistPos));

只是检查playlistPos不大于播放列表尺寸更大:

  playlistPos ++;如果(playlistPos == myUris.size()){
    playlistPos = 0;
}initSong(myUris.get(playlistPos));

这将会循环播放列表给你。

现在,以prevent你得到其他错误,请尝试删除 sdrPlayer.start() onCompletionListener ,只打电话的时候玩家prepared启动。

  sdrPlayer.setOn preparedListener(新在preparedListener(){
    @覆盖
    在prepared(MediaPlayer的MP)公共无效{
        sdrPlayer.start();
    }
});

编辑:下面是一些工作code:

 公共类MainActivity延伸活动{    私人MediaPlayer的熔点;
    私人INT playlistPos = 0;
    私人列表<&乌里GT;播放列表;
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        播放列表= createPlaylist();
        熔点为新的MediaPlayer();
        initMediaPlayer();
        initSong();
    }
    私人无效initMediaPlayer(){
        mp.setOnCompletionListener(新OnCompletionListener(){            @覆盖
            公共无效onCompletion(MediaPlayer的MP){
                playlistPos ++;                如果(playlistPos == playlist.size()){
                    playlistPos = 0;
                }                initSong();
            }
        });        mp.setOn preparedListener(新在preparedListener(){            @覆盖
            在prepared(MediaPlayer的MP)公共无效{
                mp.start();
            }
        });
    }
    私人无效initSong(){
        mp.reset();
        尝试{
            mp.setDataSource(这一点,playlist.get(playlistPos));
        }
        赶上(IOException异常五){
            e.printStackTrace();
        }        。MP prepareAsync();
    }
    私人列表<&乌里GT; createPlaylist(){
        清单<&乌里GT; myUris =新的ArrayList<&乌里GT;();
        myUris.add(Uri.parse(https://db.tt/4ANlGRms));
        myUris.add(Uri.parse(https://db.tt/TpmxsqGJ));
        myUris.add(Uri.parse(https://db.tt/rbkYtuNI));
        myUris.add(Uri.parse(https://db.tt/JYVHp9nm));
        myUris.add(Uri.parse(https://db.tt/xWLATUQp));
        myUris.add(Uri.parse(https://db.tt/WzV2TzFu));
        返回myUris;
    }}

I'm creating an android app (for my own use) that lets me listen to my favourite songs from GTA V. Media Player streams the mp3 tracks from my dropbox account and all this works fine.

The problem is that after the first song finishes I want it to play the next song however when I run the app after the first song finishes playing the app crashes instead of playing the next song in the list.

Can somebody help me fix this issue i'm having?

thanks.

Code

public class channelx extends Activity implements MediaPlayer.OnPreparedListener {

    Button play, pause, home, refresh;
    protected Dialog mSplashDialog;

     private int playlistPos = 0;
        private List<Uri> myUris = new ArrayList<Uri>();
        private MediaPlayer sdrPlayer = new MediaPlayer();

    /** Called when the activity is first created. */@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.channelx);

        final ProgressDialog progressDialog = new ProgressDialog(channelx.this);

        progressDialog.setCancelable(false);
        progressDialog.setIndeterminate(true);
        progressDialog.setMessage("Loading...");
        progressDialog.show();

        final Timer t = new Timer();
        t.schedule(new TimerTask() {
            public void run() {
                progressDialog.dismiss(); 
                t.cancel(); 
            }
        }, 5000); 

        play = (Button) findViewById(R.id.play);
        pause = (Button) findViewById(R.id.pause);
        home = (Button) findViewById(R.id.home);
        refresh = (Button) findViewById(R.id.refresh);

         myUris.add(Uri.parse("https://db.tt/4ANlGRms"));
         myUris.add(Uri.parse("https://db.tt/TpmxsqGJ"));

         myUris.add(Uri.parse("https://db.tt/rbkYtuNI"));
         myUris.add(Uri.parse("https://db.tt/JYVHp9nm"));
         myUris.add(Uri.parse("https://db.tt/xWLATUQp"));
         myUris.add(Uri.parse("https://db.tt/WzV2TzFu"));
            // Add the others as well...

            initSong(myUris.get(playlistPos));

            sdrPlayer.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    sdrPlayer.reset();

                    playlistPos++;
                    initSong(myUris.get(playlistPos));


                    sdrPlayer.start(); // Start it as well if you wish
                }
            });



        play.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                sdrPlayer.start();
            }
        }
        );


        pause.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                sdrPlayer.pause();
            }
        });

        home.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                AlertDialog.Builder builder1 = new AlertDialog.Builder(channelx.this);
                builder1.setMessage("Are you sure you want to leave this station? Playback will be stopped.");
                builder1.setCancelable(true);
                builder1.setPositiveButton("Continue",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        sdrPlayer.stop();
                        Intent intent = new Intent(channelx.this, MainActivity.class);
                        startActivity(intent);
                    }
                });
                builder1.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                    }
                });

                AlertDialog alert11 = builder1.create();
                alert11.show();

            }
        });

        refresh.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                sdrPlayer.stop();
                Intent intent = new Intent(channelx.this, channelx.class);
                startActivity(intent);
            }
        });

    }

    @Override
    public void onPrepared(MediaPlayer mp) {

    }

    public void initSong(Uri myUri) {
        try {
            sdrPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            sdrPlayer.setDataSource(this, myUri);           
            sdrPlayer.prepareAsync(); // don't use prepareAsync for mp3 playback
        }
        catch (IOException e) {

            e.printStackTrace();
            Toast.makeText(channelx.this,
                       "Please turn on WiFi and try again",
                       Toast.LENGTH_LONG).show();
        }
    }




}

LogCat

05-26 15:37:14.574: D/MediaPlayer(16744): mIsAboveSense55:-1
05-26 15:37:14.574: D/MediaPlayer(16744): sense_version:5.5
05-26 15:37:14.574: D/MediaPlayer(16744): ver s1:   55000
05-26 15:37:14.574: D/MediaPlayer(16744): ver s2:   55000
05-26 15:37:14.664: V/MediaPlayer(16744): network type=wifi
05-26 15:37:14.664: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:37:14.694: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:37:14.694: I/MediaPlayer(16744): setLPAflag() in
05-26 15:37:14.704: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:37:14.704: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:37:14.704: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:37:14.704: I/MediaPlayer(16744): setLPAflag() out
05-26 15:37:14.754: D/MediaPlayer(16744): Mediaplayer receives message, message type: 8
05-26 15:37:22.833: W/MediaPlayer(16744): info/warning (1, 902)
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 5
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 1
05-26 15:37:22.853: E/MediaPlayer(16744): Should have subtitle controller already set
05-26 15:37:24.044: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:37:24.044: D/[MediaPluginDLNA](16744): not in Mirror mode
05-26 15:37:24.044: D/MediaPlayer(16744): doStart() in
05-26 15:37:24.044: D/MediaPlayer(16744): Htc_getIntParameter = 902
05-26 15:37:24.184: D/MediaPlayer(16744): Mediaplayer receives message, message type: 6
05-26 15:37:25.115: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:26.176: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:26.176: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:26.176: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:26.186: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:27.177: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:27.207: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:28.238: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:29.370: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:29.370: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:29.370: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:29.370: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:30.391: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:30.401: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:31.412: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:31.612: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:31.612: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:31.612: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:31.612: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:32.433: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:32.433: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:39:16.584: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:39:16.764: E/MediaPlayer(16744): internal/external state mismatch corrected
05-26 15:39:16.774: D/MediaPlayer(16744): Mediaplayer receives message, message type: 2
05-26 15:39:16.774: D/MediaPlayer(16744): reset() in
05-26 15:39:16.814: D/MediaPlayer(16744): reset() out
05-26 15:39:16.814: D/MediaPlayer(16744): reset() out
05-26 15:39:16.824: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.864: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.864: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.894: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.894: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.894: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:39:16.904: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.904: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.904: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.904: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.904: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.904: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.904: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.904: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.904: D/MediaPlayer(16744): start() out
05-26 15:39:16.904: D/MediaPlayer(16744): U58 Send PlaybackCompleteEvent
05-26 15:39:16.924: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.924: E/MediaPlayer(16744): Error (-38,0)
05-26 15:39:16.924: D/MediaPlayer(16744): reset() in
05-26 15:39:16.924: D/MediaPlayer(16744): reset() out
05-26 15:39:16.924: D/MediaPlayer(16744): reset() out
05-26 15:39:16.934: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.934: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.934: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.934: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.934: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.934: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.934: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:39:16.934: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.934: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.934: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.934: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.934: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.944: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.944: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.944: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.944: D/MediaPlayer(16744): start() out
05-26 15:39:16.944: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.944: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:16.944: D/MediaPlayer(16744): reset() in
05-26 15:39:16.944: D/MediaPlayer(16744): reset() out
05-26 15:39:16.944: D/MediaPlayer(16744): reset() out
05-26 15:39:16.944: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.944: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.955: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.955: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.965: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.965: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.965: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:39:16.975: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.975: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.975: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.975: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.975: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.975: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.975: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.975: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.975: D/MediaPlayer(16744): start() out
05-26 15:39:16.975: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.975: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:16.975: D/MediaPlayer(16744): reset() in
05-26 15:39:16.975: D/MediaPlayer(16744): reset() out
05-26 15:39:16.975: D/MediaPlayer(16744): reset() out
05-26 15:39:16.975: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.985: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.985: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.985: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.995: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.995: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.995: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:39:16.995: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.995: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.995: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:17.005: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:17.005: D/MediaPlayer(16744): doStart() in
05-26 15:39:17.005: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:17.005: E/MediaPlayer(16744): start called in state 4
05-26 15:39:17.005: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:17.005: D/MediaPlayer(16744): start() out
05-26 15:39:17.005: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:17.005: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:17.005: D/MediaPlayer(16744): reset() in
05-26 15:39:17.005: D/MediaPlayer(16744): reset() out
05-26 15:39:17.005: D/MediaPlayer(16744): reset() out
05-26 15:39:17.005: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:17.015: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:17.015: V/MediaPlayer(16744): network type=wifi
05-26 15:39:17.015: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:17.015: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:17.025: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:17.025: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status: 
05-26 15:39:17.025: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:17.025: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:17.025: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:17.025: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:17.025: D/MediaPlayer(16744): doStart() in
05-26 15:39:17.025: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:17.025: E/MediaPlayer(16744): start called in state 4
05-26 15:39:17.025: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:17.025: D/MediaPlayer(16744): start() out
05-26 15:39:17.025: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:17.025: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:17.025: D/MediaPlayer(16744): reset() in
05-26 15:39:17.035: D/MediaPlayer(16744): reset() out
05-26 15:39:17.035: D/MediaPlayer(16744): reset() out
05-26 15:39:17.035: W/dalvikvm(16744): threadid=1: thread exiting with uncaught exception (group=0x4167de18)
05-26 15:39:17.035: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:17.045: E/AndroidRuntime(16744): FATAL EXCEPTION: main
05-26 15:39:17.045: E/AndroidRuntime(16744): Process: com.example.gtavradio, PID: 16744
05-26 15:39:17.045: E/AndroidRuntime(16744): java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6
05-26 15:39:17.045: E/AndroidRuntime(16744):    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at java.util.ArrayList.get(ArrayList.java:308)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at com.example.gtavradio.channelx$2.onCompletion(channelx.java:75)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3162)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at android.os.Looper.loop(Looper.java:157)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at java.lang.reflect.Method.invokeNative(Native Method)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at java.lang.reflect.Method.invoke(Method.java:515)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 15:39:17.045: E/AndroidRuntime(16744):    at dalvik.system.NativeStart.main(Native Method)
05-26 15:39:19.918: D/Process(16744): killProcess, pid=16744
05-26 15:39:19.918: D/Process(16744): com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:131 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690 

EDIT: ignore some of the daft commentary on my code

NEW LOG

05-26 16:20:11.884: E/MediaPlayer(1530): attachNewPlayer called in state 128
05-26 16:20:11.884: W/dalvikvm(1530): threadid=1: thread exiting with uncaught exception (group=0x4167de18)
05-26 16:20:11.904: E/AndroidRuntime(1530): FATAL EXCEPTION: main
05-26 16:20:11.904: E/AndroidRuntime(1530): Process: com.example.gtavradio, PID: 1530
05-26 16:20:11.904: E/AndroidRuntime(1530): java.lang.IllegalStateException
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer._setDataSource(Native Method)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1236)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1203)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1137)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at com.example.gtavradio.channelx.initSong(channelx.java:155)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at com.example.gtavradio.channelx$2.onCompletion(channelx.java:78)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3089)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.os.Looper.loop(Looper.java:157)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at java.lang.reflect.Method.invokeNative(Native Method)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at java.lang.reflect.Method.invoke(Method.java:515)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 16:20:11.904: E/AndroidRuntime(1530):     at dalvik.system.NativeStart.main(Native Method)

EDIT this code now doesn't crash the app but it still doesn't play the next song automatically, I have to repress play to get it to play the next song

sdrPlayer.setOnCompletionListener(new OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    sdrPlayer.stop();
                            sdrPlayer.reset();


                    playlistPos++;
                    if (playlistPos == myUris.size()) {
                        playlistPos = 0;
                    }
                    initSong(myUris.get(playlistPos));

                    //sdrPlayer.start(); // Start it as well if you wish
                }
            });

解决方案

You've got an array index out of bounds exception -- I assume this is caused by

playlistPos++;
initSong(myUris.get(playlistPos));

Just check that the playlistPos isn't greater than the playlist size:

playlistPos++;

if (playlistPos == myUris.size()) {
    playlistPos = 0;
}

initSong(myUris.get(playlistPos));

Which will loop the playlist for you.

Now, to prevent the other error you're getting, try removing the sdrPlayer.start() from the onCompletionListener, and only call start when the player is prepared.

sdrPlayer.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        sdrPlayer.start();
    }
});

EDIT : Here is some working code:

public class MainActivity extends Activity {

    private MediaPlayer mp;
    private int playlistPos = 0;
    private List<Uri> playlist;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        playlist = createPlaylist();
        mp = new MediaPlayer();
        initMediaPlayer();
        initSong();
    }


    private void initMediaPlayer() {
        mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                playlistPos++;

                if (playlistPos == playlist.size()) {
                    playlistPos = 0;
                }

                initSong();
            }
        });

        mp.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });
    }


    private void initSong() {
        mp.reset();
        try {
            mp.setDataSource(this, playlist.get(playlistPos));
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        mp.prepareAsync();
    }


    private List<Uri> createPlaylist() {
        List<Uri> myUris = new ArrayList<Uri>();
        myUris.add(Uri.parse("https://db.tt/4ANlGRms"));
        myUris.add(Uri.parse("https://db.tt/TpmxsqGJ"));
        myUris.add(Uri.parse("https://db.tt/rbkYtuNI"));
        myUris.add(Uri.parse("https://db.tt/JYVHp9nm"));
        myUris.add(Uri.parse("https://db.tt/xWLATUQp"));
        myUris.add(Uri.parse("https://db.tt/WzV2TzFu"));
        return myUris;
    }

}

这篇关于在数组列表播放下一首歌曲时,Android应用程序强制关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆