Не могу выключить воспроизведение аудио в 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 шт):
Поменяйте это (первая строчка) :
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