Android 一些机器人在音板上的强制关闭问题?
好吧,我的问题是,当我打开我制作的应用程序时,当我尝试单击一些歌曲时,它会强制关闭。奇怪的是,它在Galaxy Tab上运行良好,但不适用于Galaxy S、droid 2、vibrant等。以下是我用于该功能的代码: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
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可以再次做到这一点:)