强制关闭设备中的错误,但不在仿真器中

时间:2010-12-28 18:25:23

标签: android android-emulator

我创建了一个带有音乐按钮的应用程序。应用程序在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();

           }      

        });         

2 个答案:

答案 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是正确的,那里实际上有一个按钮。