无法停止 exoplayer:...SimpleExoPlayer.stop()' 在空对象引用上

Cannot stop exoplayer: ...SimpleExoPlayer.stop()' on a null object reference

我正在为我的 android 应用程序使用 exoplayer,它也运行良好,但我无法停止流。我有一个停止播放的方法,但它抛出错误,播放器为空。

MainActivity.java

    public void onClick(View v) {
        if (v == buttonPlay) {
            startPlaying();
        } else if (v == buttonStopPlay) {
            stopPlaying();
        }
    }
    public void initMediaPlayer(){
        context=MainActivity.this;

        Uri uri = Uri.parse("http://stream.mp3");
        DataSource.Factory dataSourceFactory =
                new DefaultHttpDataSourceFactory(Util.getUserAgent(context, "BoomBoxBeilstein"));
        MediaSource MediaSource =
                new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
        SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, new DefaultTrackSelector());;
        player.prepare(MediaSource);
        wl.acquire();
        wfl.acquire();
        player.setPlayWhenReady(true);
    }

    public void startPlaying() {

        buttonStopPlay.setEnabled(true);
        buttonPlay.setEnabled(false);

        playSeekBar.setVisibility(View.VISIBLE);
        super.onStart();
        initMediaPlayer();
        };

    public void stopPlaying() {
        super.onStop();

        player.stop();
        wl.release();
        wfl.release();


        buttonPlay.setEnabled(true);
        buttonStopPlay.setEnabled(false);
        playSeekBar.setVisibility(View.INVISIBLE);
    }

} 

我试过了,但我一直收到错误消息:

```java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.exoplayer2.SimpleExoPlayer.stop()' on a null object reference

我也试过

player.release();

结果相同

在您的方法 initMediaPlayer() 中,您正在创建新对象 SimpleExoPlayer player = ... 并将其存储在局部变量中,但在方法 stopPlaying() 中,您在名为的字段上调用方法 stop() player 这是空的,因为您从未将 player 的实例分配给该字段。 所以解决方案是这两个中的任何一个:

  • initMediaPlayer() 方法的末尾将局部变量分配给字段:this.player = player;
  • 不要使用局部变量 SimpleExoPlayer player 并将创建的玩家直接分配给字段而不是
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, new DefaultTrackSelector());

使用

player = ExoPlayerFactory.newSimpleInstance(context, new DefaultTrackSelector());