Media player crashes after video finished
I worked on this problem for a week, but didn't find any. Please, help me. Anyone. Everything is welcome. App runs, plays 1st video, then crashes. It works fine in the emulator (andoid 3.2), HTC phone with android 2.3, but crashes on Dreambook w7 with android 2.2.
I suggest this is becouse of some difference in VideoView class between android version 2.2 and later. May by someone knows where I can find VideoView source code? I'll include it into my project. Or may be there is some open source video players, based NOT on VideoView?
Here is my code:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
video=(VideoView)findViewById(R.id.video);
/*some code for downloading playlist and missed videos here*/
/*Then, launches some background theards for updating tham*/
/*Then, downloading some picture from URL and setting it to image view*/
/*Then, setting up another background theard for setting current time to text view*/
//So, here is player:
File clip=new File(Environment.getExternalStorageDirectory(),
playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4");
if (FLReady[FLcurrentVideo]==1) {
video.setVideoPath(clip.getAbsolutePath());
video.requestFocus();
video.start();
开发者_开发百科 sendLog(); //send some info to web server
}
else { //if video didn't exists
if (FLReady[FLcurrentVideo] == 0) {
new CheckOutVideos(false).execute(FLcurrentVideo);
}
}
/*Setting completion, for starting play next video after previous done...*/
video.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
Log.d ("111", "on Completion"); //... but, this NEVER colled
int FL = 1;
while (FL == 1) {
if (FLcurrentVideo<count-1) FLcurrentVideo++;
else FLcurrentVideo = 0;
File clip=new File(Environment.getExternalStorageDirectory(),
playList[FLcurrentVideo].substring(2, playList[FLcurrentVideo].length()-1)+".mp4");
if (FLReady[FLcurrentVideo]==1) {
FL=0;
video=(VideoView)findViewById(R.id.video);
video.setVideoPath(clip.getAbsolutePath());
video.requestFocus();
video.start();
}
else {
FL = 1;
if (FLReady[FLcurrentVideo] == 0) {
new CheckOutVideos(false).execute(FLcurrentVideo);
}
}
}
}
});
}
there is "null pointer exception" after colling OnCompletion:
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): FATAL EXCEPTION: main
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): java.lang.NullPointerException
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at android.widget.VideoView$3.onCompletion(VideoView.java:347)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:1304)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at android.os.Handler.dispatchMessage(Handler.java:99)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at android.os.Looper.loop(Looper.java:123)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at java.lang.reflect.Method.invokeNative(Native Method)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at java.lang.reflect.Method.invoke(Method.java:521)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-22 11:50:54.553: ERROR/AndroidRuntime(4529): at dalvik.system.NativeStart.main(Native Method)
In your OnComplition just remove this line
video=(VideoView)findViewById(R.id.video);
simply pass the absolute path to the old videoView which you have created onCreate()
精彩评论