Не могу выключить воспроизведение аудио в Exoplayer | NullPointerException

Здрасьте! Пытаюсь выключить стриминговую музыку при нажатии на кнопку "Пауза". На кнопке висит слушатель и в нем:

btn2.setOnClickListener(v -> {
            if (isplaying) {
                simpleExoPlayer.stop();
            }
        });

При сборке все ок, когда нажимаю на кнопку приложение крашится с ошибкой:

 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);
    }
}

Я вроде понимаю, что у меня simpleExoPlayer.stop() обращается не к simplexoplayer, который находится в initplayer, поэтому, он и выдает ошибку. Но как сделать так, чтоб он понимал что я хочу остановить плеер который у меня уже работает в initplayer, не знаю. Помогите, пожалуйста!


Ответы (1 шт):

Автор решения: AVRamones

Поменяйте это (первая строчка) :

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);
}

На это :

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);
}

Вы обьявляете в классе переменную и хотите работать с ней в дальнейшем, а инициализируете другую переменную с таким же именем внутри метода. В результате переменная класса остается равна null

→ Ссылка