6

我发布了我的应用程序,并在一些手机(如 Galaxy Nexus 或 HTC Explorer)上我的应用程序崩溃了。

我在许多手机上进行了测试,应用程序运行良好。

你能解释一下为什么会发生这种情况以及如何解决它吗?

错误

java.lang.IllegalStateException
at android.media.MediaPlayer.isPlaying(Native Method)
at com.mario.kvizoman.SoloIgra.novopitanjce(SoloIgra.java:922)
at com.mario.kvizoman.SoloIgra.onClick(SoloIgra.java:901)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3768)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)

代码

if(reptimer!=null) {
    if(reptimer.isPlaying()) {
        reptimer.stop();
    }
}

onCreate reptimer 是

reptimer = MediaPlayer.create(SoloIgra.this, R.raw.napeto);
4

2 回答 2

13

根据 Android 文档:“如果内部播放器引擎尚未初始化或已释放,则出现 IllegalStateException。”

因此,请确保您的 MediaPlayer 已初始化,并且您不要使用已发布的。

于 2013-03-31T15:21:28.130 回答
6

从您的代码中,由于repTimer.isPlaying()被调用,我假设该JAVA repTimer对象不是 NULL. 但是,IllegalStateExceptionnative MediaPlayer对象为时触发NULL(参考:http ://androidxref.com/4.2.2_r1/xref/frameworks/base/media/jni/android_media_MediaPlayer.cpp#380 )。JAVA因此,您的州和州之间存在一些不匹配native

PS:您可能需要在粘贴此问题的位置之前检查代码。在一些较早的方法调用中,本机对象已被销毁,这不会反映在您的JAVA对象状态中。

于 2013-04-01T00:06:35.163 回答