NookTablet Android - VideoView NullPointerException - PullRequest
3 голосов
/ 16 декабря 2011

Приложение работает так, что у меня есть список видео.Просмотр видео будет воспроизводить видео, и пользователь может провести пальцем влево или вправо для перехода от видео к видео.

Приложение работает без ошибок на всех других устройствах, на которых я тестировал.(Samsung Galaxy Tab 7, Samsung Galaxy Player, Acer Iconia A500, Nook Color, LG Optimus, Kindle Fire)

Затем я протестировал на планшете Nook.Я получаю исключение 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);

Но они не сработали.На данный момент я довольно озадачен, и мне нужна помощь.

С уважением,

Хайме

1 Ответ

1 голос
/ 30 мая 2013

У меня была такая же проблема с Lenovo A1_07 и тот же журнал ошибок. Но после проб и ошибок я решил это. Я изменил VideoView#stopPlayback() на VideoView#pause(), и тогда проблема была полностью решена.

...