2

基本的に、ある種のコンテンツ (画像、ビデオ、RSS フィードなど) を再生できる「メディア」プレーヤーであるアクティビティがあり、個別のレイアウト ファイルを使用しています。プレイリストがありますが、一部のビデオはハードウェアまたはエミュレータ コーデックでサポートされていません。そのため、ビデオを読み込もうとしてエラーが発生した場合は、次のページに移動して再生を試みます。

問題は、読み込みエラーが発生して次のメディアの再生を開始した後です。videoPlayer レイアウトに存在する VideoView が NPE をスローし、アプリケーションをクラッシュさせます:S

バージョン 4.1.2、4.2.2、4.3、および 2.3.3 を使用してエミュレータでテストしました。すべての 4.xx バージョンで問題が発生しました...

ビデオを再生しようとするスニペットを次に示します。

...
    videoView = (VideoView) getActivity().findViewById(R.id.videoview);

    videoView.setVideoPath(currentMediaPath);

    videoView.setOnErrorListener(new OnErrorListener()
    {
        @Override
        public boolean onError(MediaPlayer player, int what, int extra)
        {
            String message = "error: [" + currentIndex + "] " + currentMediaPath + " what: " + what + " extra: "
                    + extra;
            L.error(getLogger(), "onError: " + player + " - " + message);

            boolean delegated = false;

            try
            {
                if (isPreparing() && delegateOnError)
                {
                    delegatePlayback();
                    delegated = true;
                }
            }
            catch (Exception e)
            {
                L.error(getLogger(), "onError: error delegating playback -> " + player, e);
            }

            if (!delegated)
            {
                notifyError(new Exception(message));
            }

            return true;
        }
    });
...

そしてここでクラッシュ...

java.lang.NullPointerException
    at android.view.SurfaceView.updateWindow(SurfaceView.java:574)
    at android.view.SurfaceView.access$000(SurfaceView.java:81)
    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169)
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:671)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1820)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4214)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
    at android.view.Choreographer.doFrame(Choreographer.java:525)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4745)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)
4

0 に答える 0