2013-03-31 46 views
2

我發佈了我的應用程序,並在我的APP崩潰的Galaxy Nexus或HTC Explorer等手機上發佈。android java.lang.IllegalStateException MediaPlayer.isPlaying

我在很多手機上測試過,應用程序運行完美。

你能解釋一下爲什麼會發生這種情況,以及如何解決這個問題?

ERROR

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) 

CODE

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

的onCreate reptimer是

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

回答

8

按照Android文檔:「IllegalStateException異常如果內部FLASH播放器r引擎尚未初始化或已被釋放。「

因此,請確保您的MediaPlayer已初始化,並且您不使用已發佈的版本。

+2

你好:)如何確保MediaPlayer是否已初始化?在我的代碼中,if(mediaPlayer!= null)if(mediaPlayer.isPlaying())/ *做了事情* /',但我仍然在第二個if語句中得到異常。 – ocramot

+2

@ocramot手動控制您的播放器狀態 - 例如將狀態保存在局部變量中或用try/catch塊包裝代碼 – Taras

+1

謝謝!我希望MediaPlayer庫中已經內置了一些功能 – ocramot

2

從你的代碼,因爲repTimer.isPlaying()是越來越調用,我假設JAVArepTimer對象NULL。但是,當nativeMediaPlayer對象是NULL(參考:http://androidxref.com/4.2.2_r1/xref/frameworks/base/media/jni/android_media_MediaPlayer.cpp#380)時,會觸發IllegalStateException。因此,您的JAVA狀態和native狀態之間存在一些不匹配。

P.S:您可能希望檢查粘貼在此問題中的位置之前的代碼。在一些較早的方法調用中,本地對象已被銷燬,這並不反映在您的對象狀態中。

相關問題