无法停止 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());
我正在为我的 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());