CheckBox上的.IllegalStateException

时间:2014-07-17 13:49:40

标签: android illegalstateexception

我正在开发一个需要多个Media Players和onTouchListener的项目。 我想添加CheckBox,如果选中框,则选择循环Mp。但我收到这个错误,我不明白为什么。 这是我的代码:

CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                if (isChecked == true) {
                    mp1.setLooping(true);
                    mp2.setLooping(true);
                    mp3.setLooping(true);
                    mp4.setLooping(true);
                    mp5.setLooping(true);
                    mp6.setLooping(true);
                    mp7.setLooping(true);
                    mp8.setLooping(true);
                    mp9.setLooping(true);
                    mp10.setLooping(true);
                    mp11.setLooping(true);
                    mp12.setLooping(true);
                    mp13.setLooping(true);
                    mp14.setLooping(true);
                    mp15.setLooping(true);
                    Toast.makeText(MainClass.this, "Looping On",
                            Toast.LENGTH_SHORT).show();
                } else {
                    mp1.setLooping(false);
                    mp2.setLooping(false);
                    mp3.setLooping(false);
                    mp4.setLooping(false);
                    mp5.setLooping(false);
                    mp6.setLooping(false);
                    mp7.setLooping(false);
                    mp8.setLooping(false);
                    mp9.setLooping(false);
                    mp10.setLooping(false);
                    mp11.setLooping(false);
                    mp12.setLooping(false);
                    mp13.setLooping(false);
                    mp14.setLooping(false);
                    mp15.setLooping(false);
                    Toast.makeText(MainClass.this, "Looping Off",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });

MP:

    if (id == R.id.sound5) {
                if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
                    pressed = true;
                    mp5 = MediaPlayer.create(MainClass.this, R.raw.item5);
                    mp5.start();
                    sound5.setBackgroundResource(R.drawable.button_pressed);
                } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
                    pressed = false;
                    mp5.stop();
                    mp5.release();
                    sound5.setBackgroundResource(R.drawable.button_normal);
                }

07-17 15:41:14.272: W/dalvikvm(16742): threadid=1: thread exiting with uncaught exception (group=0x41a138b0)
07-17 15:41:14.282: E/AndroidRuntime(16742): FATAL EXCEPTION: main
07-17 15:41:14.282: E/AndroidRuntime(16742): java.lang.IllegalStateException
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.media.MediaPlayer.setLooping(Native Method)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at soundmaniacs.com.MainClass$1.onCheckedChanged(MainClass.java:96)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.widget.CompoundButton.setChecked(CompoundButton.java:126)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.widget.CompoundButton.toggle(CompoundButton.java:87)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.widget.CompoundButton.performClick(CompoundButton.java:99)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.view.View$PerformClick.run(View.java:17903)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.os.Handler.handleCallback(Handler.java:730)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.os.Looper.loop(Looper.java:213)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at android.app.ActivityThread.main(ActivityThread.java:5225)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at java.lang.reflect.Method.invoke(Method.java:525)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-17 15:41:14.282: E/AndroidRuntime(16742):    at dalvik.system.NativeStart.main(Native Method)

第96行是:

mp1.setLooping(true);

有人能告诉我我做错了什么吗?可能是因为Mp没玩?

1 个答案:

答案 0 :(得分:0)

您正在获得IllegalStateException,因为您正在release()对象上调用MediaPlayer,这会将其置于 End 状态。当MediaPlayer达到此状态时,"它将无法再使用,并且无法将其恢复到任何其他状态。"这意味着在播放器上调用setLooping()将导致上述异常。避免这种情况的最简单方法是删除对release()的调用。如果您确实希望尽可能释放播放器,为了将使用的资源保持在最低限度,那么您在调用setLooping()时需要确保播放器重新实例化并处于有效状态。

引用来自docs, here.