我有一个简单的应用程序,但它似乎不是很简单。我想要做的是:当我按下按钮1播放Song1时,如果我按下按钮2 - 则Song1停止而歌曲2播放 如果我只有2个按钮和2首歌曲,我可以做到这一点,但是当我有更多时,我怎么能做到呢? 这是我的代码
private MediaPlayer mp1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Bot1 = (Button) findViewById(R.id.button1);
Button Bot2 = (Button) findViewById(R.id.button2);
Button Bot3 = (Button) findViewById(R.id.button3);
Button Bot4 = (Button) findViewById(R.id.button4);
Bot1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying()){
mp1.stop();
mp1.release(); }
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.bath);
mp1.start();
}
}
});
Bot2.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);
mp1.start();}
}
});
Bot3.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflush);
mp1.start();}
}
});
Bot4.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
mp1.start();
} }
});
mp1 = MediaPlayer.create(this, R.raw.tolflushs);
}
答案 0 :(得分:1)
按Button1
mp2.stop();mp3.stop();mp4.stop();
被调用但尚未创建这些MediaPlayers。这就是为什么你要联网null pointer exception
。
实例化OnClickListener
以外的所有MediaPlayers。
另外我建议不要使用4个MediaPlayers,因为你浪费了资源。只创建一个,每次单击一个按钮,检查它是否正在播放,停止,释放它并重新创建它:
if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);
答案 1 :(得分:0)
为了避免NullPointerException,如果mp实例不像if ((mp1 != null) && mp1.isPlaying())
那样是空的,你可以在你的条件下测试,如果你想管理几个媒体播放器的几个按钮,你可以使用Map。
答案 2 :(得分:0)
好吧,我解决了nullpointexception,在此之后我得到了一个非法的例外,现在我让玩家工作了。我知道哪个是问题,我知道代码是基于逻辑的,但当时我的逻辑效率不高,我睡着了,早上我已经知道了答案:)
创建了private void stopPlayers()//(编码器会说我疯了:)
if (mp1.isPlaying()) { mp1.stop(); mp1.reset();}else
if (mp2.isPlaying()){ mp2.stop(); mp2.reset();}else
if (mp3.isPlaying()){ mp3.stop(); mp3.reset();}else
if (mp4.isPlaying()){ mp4.stop(); mp4.reset();}else{ mp1.reset();
在每个OnClickListener中添加stopPlayers()
Bot4.setOnClickListener(new OnClickListener(){
public void onClick(View v) { if(mp4.isPlaying()) { mp4.stop();} else { stopPlayers(); mp4 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs); mp4.start(); } } }); }
就是这样,现在如果我有10个不同的歌曲的10个按钮我可以播放我想要的歌曲,之前的歌曲将停止播放。即使我按下相同的按钮也会停止播放。