2012-01-23 65 views
0

任何解釋爲什麼會發生這種情況。我看到媒體播放器如何在模擬器上工作,但有時在真實設備上出現問題......我無法解決這個問題,因爲模擬器沒有顯示錯誤。mediaplayer IllegalStateException模擬器上沒有錯誤,但有時在實際設備上崩潰

代碼創建MP,其通過使用堆棧跟蹤

java.lang.RuntimeException: An error occured while executing doInBackground() 
    at android.os.AsyncTask$3.done(AsyncTask.java:200) 
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
    at java.lang.Thread.run(Thread.java:1096) 
Caused by: java.lang.IllegalStateException 
    at android.media.MediaPlayer._start(Native Method) 
    at android.media.MediaPlayer.start(MediaPlayer.java:798) 
    at myApp.activity.com.myApp.play(myApp.java:320) 
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:454) 
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

和線發現

  mp = new MediaPlayer(); 
     mp.setDataSource(myStream); 
      mp.prepare(); //also consider mp.prepareAsync(). 

錯誤在那裏墜毀如果遵循myApp.java 454

mp.start(); 

請解釋或幫我。我會很高興,比

問候,彼得。

回答

0

只有在MediaPlayerpreparedpaused時,您纔可以撥打開始號碼,如documenatation中所述。

這裏可能存在計時問題,導致該錯誤只在某些情況下出現。也就是說,如果代碼的某些部分在代碼的另一部分之前運行,則MediaPlayer將處於錯誤狀態,並且會出現此崩潰。搜索調用MediaPlayer上的狀態轉換方法的點,並查看是否有可能以錯誤的順序調用它們。

如果您不注意,看到您使用期貨可以很容易地以錯誤的順序調用方法。

+0

感謝評論..但我不是白癡。我知道我需要使用媒體播放器 – Peter

+0

@Peter是否閱讀過關於線程問題的部分?你不需要成爲一個白癡找不到其中之一。相反,他們通常是最難找到的錯誤。 – vidstige

相關問題