2011-10-19 48 views
23

Tôi đang phát triển một ứng dụng video. Sau khi phát lại video đầu tiên được thực hiện, trong "OnCopletion" tôi đang cố gắng để bắt đầu một cái mới. Nhưng nó chỉ dừng lại (không bị treo) và không làm gì cả. Trong nhật ký:java.lang.IllegalStateException có nghĩa là gì?

10-19 09:44:49.056: ERROR/MediaPlayer(4654): setDataSource called in state 128 
10-19 09:44:49.056: WARN/System.err(4654): java.lang.IllegalStateException 
10-19 09:44:49.056: WARN/System.err(4654):  at android.media.MediaPlayer.setDataSource(Native Method) 
10-19 09:44:49.056: WARN/System.err(4654):  at ru.osiris.BusAdvertising.BusAdvertisingActivity.onCompletion(BusAdvertisingActivity.java:1255) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1304) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.os.Looper.loop(Looper.java:123) 
10-19 09:44:49.056: WARN/System.err(4654):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
10-19 09:44:49.056: WARN/System.err(4654):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-19 09:44:49.056: WARN/System.err(4654):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-19 09:44:49.056: WARN/System.err(4654):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
10-19 09:44:49.056: WARN/System.err(4654):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
10-19 09:44:49.056: WARN/System.err(4654):  at dalvik.system.NativeStart.main(Native Method) 

có nghĩa là gì? Làm thế nào tôi có thể sửa chữa nó? có mã của tôi:

public class BusAdvertisingActivity extends Activity implements LocationListener, OnBufferingUpdateListener, OnCompletionListener, 
OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 
... 
    private MediaPlayer mMediaPlayer; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    private String path; 
    private Bundle extras; 

    @Override 
    public void onCreate(Bundle icicle) { 
     mPreview = (SurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     extras = getIntent().getExtras(); 
    } 
public void surfaceCreated(SurfaceHolder holder) { 
     Log.d(TAG, "surfaceCreated called"); 
     playVideo(); 
} 
private void playVideo(Integer Media) { 
     Log.d(TAG, "playVideo called"); 
     doCleanUp(); 
     try { 
      File clip=new File(Environment.getExternalStorageDirectory(), 
          playList[FLcurrentVideo].substring(2,   playList[FLcurrentVideo].length()-1)+".mp4"); 
      path = clip.getAbsolutePath(); 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setDataSource(path); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 


     } catch (Exception e) { 
      Log.e(TAG, "error: " + e.getMessage(), e); 
     } 
    } 


public void onCompletion(MediaPlayer arg0) { 

     Log.d(TAG, "onCompletion called"); 
     FLcurrentVideo++; 

     File clip=new File(Environment.getExternalStorageDirectory(), 
       playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4"); 
       path = clip.getAbsolutePath(); 

        try { 
         Log.d ("111", path); 
         arg0.setDataSource(clip.getAbsolutePath()); //I got exception here 
         arg0.setDisplay(holder); 
         arg0.prepare(); 
         arg0.setOnBufferingUpdateListener(this); 
         arg0.setOnCompletionListener(this); 
         arg0.setOnPreparedListener(this); 
         arg0.setOnVideoSizeChangedListener(this); 
         arg0.setAudioStreamType(AudioManager.STREAM_MUSIC); 
        } catch (IllegalArgumentException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 



    } 

Vui lòng trợ giúp tôi.

Trả lời

0

docs Android nói về IllegalStateException:

Ném khi một hành động đang cố gắng tại một thời điểm khi VM không có trong trạng thái chính xác.