2011-12-16 143 views
3

應用程序的工作方式是我有一個視頻列表。視頻視圖將播放視頻,用戶可以向左或向右滑動以從視頻切換到視頻。NookTablet Android - VideoView NullPointerException

該應用程序在我測試過的所有其他設備中無錯誤地工作。 (Samsung Galaxy Tab 7,Samsung Galaxy Player,Acer Iconia A500,Nook Color,LG Optimus,Kindle Fire)

然後我在Nook Tablet上進行了測試。我得到一個NullPointerException。這發生在我向一個方向滑動(vid1> vid2)時,然後向另一個方向滑動(vid2> vid1)。

這裏是崩潰的代碼段:

private void playVideo(ViewFlipper flipper){ 

     LinearLayout flipperchild = (LinearLayout) flipper.getCurrentView(); 
     VideoView video = (VideoView) flipperchild.getChildAt(0); 

     if(preVideoView != null){ 
     preVideoView.stopPlayback();  
     preVideoView.setVisibility(View.INVISIBLE); 
     } 

       // Current Video   
     nextVideoView = video; 

       // Current Video for pausing 
     pauseVideoView = nextVideoView; 

     nextVideoView.setVisibility(View.VISIBLE); 
     nextVideoView.requestFocus(); 
     nextVideoView.start(); 

       // Stores the current video, so when I change videos this 
       // becomes the previous video 
     preVideoView = nextVideoView; 
     isPlaying = true; 
     nextVideoView.setOnTouchListener(videoViewTouch);  
    } 

下面是我把日誌:

E/AndroidRuntime(27744): FATAL EXCEPTION: main 
E/AndroidRuntime(27744): java.lang.NullPointerException 
E/AndroidRuntime(27744): at android.widget.VideoView.openVideo(VideoView.java:330) 
E/AndroidRuntime(27744): at android.widget.VideoView.access$2600(VideoView.java:60) 
E/AndroidRuntime(27744): at android.widget.VideoView$6.surfaceCreated(VideoView.java:604) 
E/AndroidRuntime(27744): at android.view.SurfaceView.updateWindow(SurfaceView.java:547) 
E/AndroidRuntime(27744): at android.view.SurfaceView.setVisibility(SurfaceView.java:221) 
E/AndroidRuntime(27744): at com.selectsoft.gymnasticskids.VideoChapter.playVideo(VideoChapter.java:407) 
E/AndroidRuntime(27744): at com.selectsoft.gymnasticskids.VideoChapter.access$2(VideoChapter.java:397) 
E/AndroidRuntime(27744): at com.selectsoft.gymnasticskids.VideoChapter$OnTouchViewFlipper.onTouch(VideoChapter.java:376) 
E/AndroidRuntime(27744): at android.view.View.dispatchTouchEvent(View.java:3882) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:914) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) 
E/AndroidRuntime(27744): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1852) 
E/AndroidRuntime(27744): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1271) 
E/AndroidRuntime(27744): at android.app.Activity.dispatchTouchEvent(Activity.java:2096) 
E/AndroidRuntime(27744): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1836) 
E/AndroidRuntime(27744): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2198) 
E/AndroidRuntime(27744): at android.view.ViewRoot.handleMessage(ViewRoot.java:1882) 
E/AndroidRuntime(27744): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(27744): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(27744): at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime(27744): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(27744): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(27744): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime(27744): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime(27744): at dalvik.system.NativeStart.main(Native Method) 

我不知道是什麼導致空指針,但我已經嘗試使用都

setContentView(); 
VideoView video = (VideoView) findViewById(R.id.chapterVideoView); 

但他們沒有工作。在這一點上,我非常難過,並希望得到一些幫助。

問候,

海梅

+0

我建議用下面一行代替遍佈整個地方的任務,只是爲了清楚發生了什麼:`nextVideoView = pauseVideoView = preVideoView = video;`。但我無法想象這實際上對NPE有幫助。 – sarnold 2011-12-16 00:30:12

回答

1

我曾與聯想A1_07和同一個錯誤日誌同樣的問題。但經過反覆試驗,我解決了它。我將VideoView#stopPlayback()更改爲VideoView#pause(),然後問題完全解決。