Android 一些机器人在音板上的强制关闭问题?

Android 一些机器人在音板上的强制关闭问题?,android,button,sdk,crash,Android,Button,Sdk,Crash,好吧,我的问题是,当我打开我制作的应用程序时,当我尝试单击一些歌曲时,它会强制关闭。奇怪的是,它在Galaxy Tab上运行良好,但不适用于Galaxy S、droid 2、vibrant等。以下是我用于该功能的代码: import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.view.View; import android.widget.But

好吧,我的问题是,当我打开我制作的应用程序时,当我尝试单击一些歌曲时,它会强制关闭。奇怪的是,它在Galaxy Tab上运行良好,但不适用于Galaxy S、droid 2、vibrant等。以下是我用于该功能的代码:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;



public class MyMain extends Activity {


    /** Called when the activity is first created. */
    MediaPlayer mpButtonClick;
    MediaPlayer pButtonClick;
    MediaPlayer oButtonClick;
    MediaPlayer tButtonClick;
    MediaPlayer sButtonClick;
    MediaPlayer aButtonClick;
    MediaPlayer dButtonClick;
    MediaPlayer cButtonClick;
    MediaPlayer lButtonClick;
    MediaPlayer himButtonClick;
    MediaPlayer herButtonClick;
    MediaPlayer hellButtonClick;
    MediaPlayer mocButtonClick;
    MediaPlayer rasButtonClick;
    MediaPlayer raseButtonClick;
    MediaPlayer dalekButtonClick;
    MediaPlayer sharButtonClick;
    MediaPlayer godButtonClick;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

      //set up the button sounds
  mpButtonClick = MediaPlayer.create(this, R.raw.money);

        Button bmoney = (Button) findViewById(R.id.money);
        bmoney.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mpButtonClick.start();

            }
        });


      pButtonClick = MediaPlayer.create(this, R.raw.pants);

        Button bpants = (Button) findViewById(R.id.pants);
        bpants.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                pButtonClick.start();

            }       


        });

   oButtonClick = MediaPlayer.create(this, R.raw.oath);

        Button oath = (Button) findViewById(R.id.oath);
        oath.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                oButtonClick.start();

            }       


        });

     tButtonClick = MediaPlayer.create(this, R.raw.tardis);

        Button tardis = (Button) findViewById(R.id.tardis);
        tardis.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                tButtonClick.start();

            }       


        });

     sButtonClick = MediaPlayer.create(this, R.raw.screwdriver);

        Button screwdriver = (Button) findViewById(R.id.screwdriver);
        screwdriver.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sButtonClick.start();

            }       


        });

      aButtonClick = MediaPlayer.create(this, R.raw.alarm);

        Button alarm = (Button) findViewById(R.id.alarm);
        alarm.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                aButtonClick.start();

            }       


        });

     dButtonClick = MediaPlayer.create(this, R.raw.kame);

        Button kame = (Button) findViewById(R.id.kame);
        kame.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dButtonClick.start();

            }       

            });

     cButtonClick = MediaPlayer.create(this, R.raw.card);

        Button card = (Button) findViewById(R.id.card);
        card.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                cButtonClick.start();

            }       

            });

    lButtonClick = MediaPlayer.create(this, R.raw.laugh);

        Button laugh = (Button) findViewById(R.id.laugh);
        laugh.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                lButtonClick.start();

            }       

            });

himButtonClick = MediaPlayer.create(this, R.raw.him);

        Button him = (Button) findViewById(R.id.him);
        him.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                himButtonClick.start();

            }       

            });

herButtonClick = MediaPlayer.create(this, R.raw.her);

        Button her = (Button) findViewById(R.id.her);
        her.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                herButtonClick.start();

            }       

            });

hellButtonClick = MediaPlayer.create(this, R.raw.hell);

        Button hell = (Button) findViewById(R.id.hell);
        hell.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                hellButtonClick.start();

            }       

            });

mocButtonClick = MediaPlayer.create(this, R.raw.mocking);

        Button mocking = (Button) findViewById(R.id.mocking);
        mocking.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mocButtonClick.start();

            }       

            });

godButtonClick = MediaPlayer.create(this, R.raw.god);

        Button god = (Button) findViewById(R.id.god);
        god.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                godButtonClick.start();

            }       

            });

rasButtonClick = MediaPlayer.create(this, R.raw.rasengan);

        Button rasengan = (Button) findViewById(R.id.rasengan);
        rasengan.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                rasButtonClick.start();

            }       

            });

raseButtonClick = MediaPlayer.create(this, R.raw.rasen);

        Button rasen = (Button) findViewById(R.id.rasen);
        rasen.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                raseButtonClick.start();

            }       

            });

dalekButtonClick = MediaPlayer.create(this, R.raw.dalek);

        Button dalek = (Button) findViewById(R.id.dalek);
        dalek.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dalekButtonClick.start();

            }       

            });

sharButtonClick = MediaPlayer.create(this, R.raw.sharingan);

        Button sharingan = (Button) findViewById(R.id.sharingan);
        sharingan.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sharButtonClick.start();

            }       

            });




    }


}
抱歉代码太长了我真的需要帮助

编辑:如果有帮助,我总是得到:

java.lang.NullPointerException
MyMain$8.onClick()

如果没有logcat输出或堆栈跟踪,我猜您一次将这么多的
MediaPlayer
实例加载到内存中,会让大多数设备大失所望!调用
MediaPlayer.create()
不仅会创建另一个实例,还会对其调用
prepare()
,并使其准备好滚动。或许可以尝试更精简的方法:

public class MyMain extends Activity implements MediaPlayer.OnCompletionListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Set up the buttons
    Button bmoney = (Button) findViewById(R.id.money);
    bmoney.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.money);
        }
    });

    Button bpants = (Button) findViewById(R.id.pants);
    bpants.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.pants);
        }       
    });

    Button oath = (Button) findViewById(R.id.oath);
    oath.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.oath);
        }       
    });

    Button tardis = (Button) findViewById(R.id.tardis);
    tardis.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.tardis);
        }       
    });

    Button screwdriver = (Button) findViewById(R.id.screwdriver);
    screwdriver.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.screwdriver);
        }       
    });

    Button alarm = (Button) findViewById(R.id.alarm);
    alarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.alarm);
        }       
    });

    Button kame = (Button) findViewById(R.id.kame);
    kame.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.kame);
        }       
    });

    Button card = (Button) findViewById(R.id.card);
    card.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.card);
        }       

    });

    Button laugh = (Button) findViewById(R.id.laugh);
    laugh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.laugh);
        }       
    });

    Button him = (Button) findViewById(R.id.him);
    him.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.him);
        }       
    });

    Button her = (Button) findViewById(R.id.her);
    her.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.her);
        }       
    });

    Button hell = (Button) findViewById(R.id.hell);
    hell.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.hell);
        }       
    });

    Button mocking = (Button) findViewById(R.id.mocking);
    mocking.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.mocking);
        }       
    });

    Button god = (Button) findViewById(R.id.god);
    god.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.god);
        }       
    });

    Button rasengan = (Button) findViewById(R.id.rasengan);
    rasengan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.rasengan);
        }       
    });

    Button rasen = (Button) findViewById(R.id.rasen);
    rasen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.rasen);
        }       
    });

    Button dalek = (Button) findViewById(R.id.dalek);
    dalek.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.dalek);
        }       
    });

    Button sharingan = (Button) findViewById(R.id.sharingan);
    sharingan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            playSound(R.raw.sharingan);
        }       
    });
}

//Consolidate media playing to one location
private void playSound(int resId) {
    MediaPlayer mp = MediaPlayer.create(this, resId);
    mp.setOnCompletionListener(this);
    mp.start();
}

//Completion listener method
public void onCompletion(MediaPlayer mp) {
    mp.release();
}

}
此方法将创建
MediaPlayer
实例,并仅在需要时播放声音。完成后,侦听器可以释放资源以保持内存占用合理

您还可以通过使用android进一步简化此代码:在XML中单击一次,让所有按钮调用一个方法,然后根据按钮id使用正确的id调用
playSound()
(当然,除非您的目标是1.5)


希望有帮助

请发布fc错误的完整堆栈跟踪。使用logcat:在eclipse中打开DDMS透视图,或者从命令行运行
adb logcat
。这不是完整的stacktrace,只是它的第一行。请张贴完整的stacktrace,并告诉我们它指向代码中的哪一行。那一行的某些内容为空。这就是问题所在。我没有意识到,打这么多次电话给MediaPlayer可以再次做到这一点:)