繁体   English   中英

我无法在 ExoPlayer 中关闭音频播放! 空指针异常

[英]I cant turn the audio playback off in ExoPlayer! NullPointerException

我面临一个问题:我无法关闭音频播放

这是错误:

   java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.exoplayer2.SimpleExoPlayer.stop()' on a null object reference
    at com.dglasmann.radioapp.MainActivity.lambda$onCreate$1$MainActivity(MainActivity.java:37)

这是 MainActivity.java 的代码:

public class MainActivity extends AppCompatActivity {
    SimpleExoPlayer simpleExoPlayer;
    Button btn, btn2;
    boolean isplaying;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        isplaying = false;
        btn = findViewById(R.id.btn);
        btn.setOnClickListener(v -> {
            if (!isplaying) {
                initplayer();
                isplaying = true;
            }
            });
        btn2 = findViewById(R.id.btn2);
        btn2.setOnClickListener(v -> {
            if (isplaying) {
                simpleExoPlayer.stop();
            }
        });
    }

    public void initplayer() {
        SimpleExoPlayer simpleExoPlayer = new SimpleExoPlayer.Builder(this).build();
        DataSource.Factory datasourcefactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this,"app"));
        MediaSource audiosource = new ProgressiveMediaSource.Factory(datasourcefactory).createMediaSource(Uri.parse("https://stream.audioxi.com/SW"));
        simpleExoPlayer.prepare(audiosource);
        simpleExoPlayer.setPlayWhenReady(true);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        simpleExoPlayer.release();
    }

    @Override
    protected void onPause() {
        simpleExoPlayer.release();
        super.onPause();
    }
    public void pause() {
        simpleExoPlayer.setPlayWhenReady(false);
    }
}

当我调用 btn2.setOnClickListener 时出现错误。 我知道我指的是另一个 simpleExoPlayer,它不是“initplayer”function,所以这就是我有这个错误的原因。 但我不知道如何引用 function“initplayer”包含的 simpleExoPlayer。 如果我不按 btn2 它工作正常。

您正面临此错误,因为在 initplayer() 中,您正在创建 ExoPlayer 的新实例。 因此,要解决它,只需将您的 initplayer 更改为:

public void initplayer() {
    simpleExoPlayer = new SimpleExoPlayer.Builder(this).build();
    DataSource.Factory datasourcefactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this,"app"));
    MediaSource audiosource = new ProgressiveMediaSource.Factory(datasourcefactory).createMediaSource(Uri.parse("https://stream.audioxi.com/SW"));
    simpleExoPlayer.prepare(audiosource);
    simpleExoPlayer.setPlayWhenReady(true);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM