我正在玩一些基本的android,我正在尝试编写一个节拍器应用程序。基本的想法是我使用runnable以便在一段时间(msPeriod)之后触发声音。我曾尝试使用SoundPool,但它只会记录'sample not loaded',并尝试ititialise一个MediaPlayer会导致应用程序在打开时崩溃。你能告诉我哪里出错了吗?以下是我使用MediaPlayer的代码。
//I create the media player first thing inside MainActivity
private Handler handler = new Handler();
int msPeriod = 1000;
MediaPlayer mpHigh = MediaPlayer.create(this, R.raw.hightick);
MediaPlayer mpLow = MediaPlayer.create(this, R.raw.lowtick);
//within an onClick Listener
onClick(View v) { handler.postDelayed(startMetron, msPeriod); }
//the runnable that starts the metronome
private Runnable startMetron = new Runnable( ) {
@Override
public void run() {
if(isRunning){
if (count == 4) {
count = 1;
mphigh.start();
} else {
count++;
mplow.start();
}
}
textCount.setText(String.valueOf(count));
//triggering the next run
handler.postDelayed(this, msPeriod);
}
};
非常感谢与我合作!
答案 0 :(得分:0)
您正在运行单独的线程。 UI元素必须从主线程更新...所以..
runOnUiThread(new Runnable(){
public void run() {
textCount.setText(String.valueOf(count));
}
});
这可确保textview从UI线程更新,您的应用程序不会崩溃。