有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

这是一个错误:

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

以下是主要活动的代码。爪哇:

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。我知道我指的是另一个SimpleXoPlayer,它不是“initplayer”函数,所以我有这个错误。但我不知道如何引用simpleExoPlayer,函数“initplayer”包含哪些内容。 如果我不按btn2,它可以正常工作


共 (1) 个答案

  1. # 1 楼答案

    您正面临此错误,因为在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);
    }