Java 尝试调用虚拟方法';void android.media.MediaPlayer.stop()';关于空对象引用
我正在对我的mediaplayer实例调用stop()方法,它显示“试图在空对象引用上调用虚拟方法'void android.media.mediaplayer.stop()”,这意味着mediaplayer对象为空,但当我像(mediaplayer!=null)stop()那样编写它时;它执行得很好。但如果对象实际为null,则不应执行此条件。有人能解释发生了什么事吗Java 尝试调用虚拟方法';void android.media.MediaPlayer.stop()';关于空对象引用,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我正在对我的mediaplayer实例调用stop()方法,它显示“试图在空对象引用上调用虚拟方法'void android.media.mediaplayer.stop()”,这意味着mediaplayer对象为空,但当我像(mediaplayer!=null)stop()那样编写它时;它执行得很好。但如果对象实际为null,则不应执行此条件。有人能解释发生了什么事吗 @Override public View onCreateView(LayoutInflater inflater, Vie
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_hello_moon, container, false);
Button play = v.findViewById(R.id.play);
Button stop = v.findViewById(R.id.stop);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp == null) {
mp = MediaPlayer.create(getActivity(), R.raw.one_small_step);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
}
});
mp.start();
}
else {
mp.stop();
try {
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
}
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp != null) {
mp.release();
mp = null;
}
}
});
return v;
}
//this is not working
@Override
public void onDestroy() {
super.onDestroy();
mp.stop();
}
//this works fine
@Override
public void onDestroy() {
super.onDestroy();
if(mp != null)
mp.stop();
}
请像这样试试
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_hello_moon, container, false);
Button play = v.findViewById(R.id.play);
Button stop = v.findViewById(R.id.stop);
if(mp == null) {
mp = MediaPlayer.create(getActivity(), R.raw.one_small_step);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
}
});
}
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp != null) {
mp.start();
}
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp != null) {
mp.release();
}
}
});
return v;
}
@Override
public void onDestroy() {
super.onDestroy();
if(mp != null)
mp.stop();
}
之所以发生这种情况是因为存在
mp.stop()
在初始化之前被称为onDestroy()
!这意味着有一个案例生成的MediaPlayer
没有正确初始化,您离开了活动
。我添加了更多的代码。现在你能告诉我发生了什么吗?看看stop.setOnClickListener
你在做什么mp=null代码>!这就是我对他们说的。他在stop按钮中完成了mp=null
,那么他如何不检查mp.stop()!但我没有点击停止按钮,我只是播放它,然后旋转我的设备