我创建了一个带有音乐按钮的应用程序。应用程序在eclipse的模拟器中运行没有问题,但因为我使用我的三星galaxy s模拟器我有一个强制按下错误,因为我按任何按钮..这是我的logt当我按下一个btn: ![替代文字] [1]
这是我56-86行的代码
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v){
if(mp2.isPlaying()==true||mp3.isPlaying()==true||mp4.isPlaying()==true||mp5.isPlaying()==true||mp6.isPlaying()==true||mp7.isPlaying()==true||mp8.isPlaying()==true||mp9.isPlaying()==true||mp10.isPlaying()==true||mp11.isPlaying()==true||mp12.isPlaying()==true)
{mp2.stop();
mp3.stop();mp4.stop();mp5.stop();mp6.stop();mp7.stop();mp8.stop();mp9.stop();mp10.stop();mp11.stop();mp12.stop();
try {
mp2.prepare();
mp3.prepare();
mp4.prepare();
mp5.prepare();mp6.prepare();mp7.prepare();mp8.prepare();mp9.prepare();mp10.prepare();
mp11.prepare();mp12.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mp.start();
Toast.makeText(a.this, "Eisai", Toast.LENGTH_SHORT).show();
}
else
mp.start();
Toast.makeText(a.this, "Eisai sto myalo", Toast.LENGTH_SHORT).show();
}
});
答案 0 :(得分:1)
你的“if”语句是否排在第58行? (假设您已正确记录了行范围,它应该是。)在该行上设置调试断点,并检查所有的mp *变量。很可能其中一个是null。作为旁注,对于更清晰的代码,您可能希望尝试使用ArrayList<MediaPlayer>
来存储所有这些MediaPlayer对象。
编辑:您可以找到ArrayList文档here。
基本上:
List<MediaPlayer> mediaPlayers = new ArrayList<MediaPlayer>();
//I have no idea how you're currently making the MediaPlayers,
//so modify accordingly.
mediaPlayers.add(MediaPlayer.create(Context, Uri));
然后,你可以使用类似的东西:
public void stopAllIfPlaying(ArrayList<MediaPlayer> mps) {
for (MediaPlayer mp : mps) {
if(mp.isPlaying()) mp.stop();
}
}
而不是if语句和stop语句,请使用以下内容:
stopAllIfPlaying(mediaPlayers);
然后使用prepare
语句做类似的事情。
答案 1 :(得分:0)
下次当你发布一个堆栈跟踪时,NPE之前会发生什么比之后发生的事情要好得多......但很明显Button button = (Button) findViewById(R.id.btn1)
返回null。确保你的XML是正确的,那里实际上有一个按钮。