我对java很新,所以如果我犯了一个非常愚蠢的错误,请耐心等待。 我正在尝试使用SoundPool在计数器应用程序上单击按钮时播放声音,但是 单击任一按钮时应用程序崩溃。 编译期间不会显示任何错误。 这是代码。
package com.example.c0unter;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.media.SoundPool;
import android.media.AudioManager;
public class MainActivity extends Activity {
private int Count=0;
private SoundPool spool;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button ResetButton = (Button) findViewById(R.id.ResetButton);
Button CounterButton = (Button) findViewById(R.id.CounterButton);
final TextView CountText = (TextView) findViewById(R.id.CountText);
ResetButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Sound(R.raw.reset_button);
Count=0;
CountText.setText(" " + Count);
}
});
CounterButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Sound(R.raw.counter_button);
Count++;
CountText.setText(" " +Count);
}
});
}
public void Sound(int soundID){
spool.load(this, soundID ,1);
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
spool.play(soundID, volume, volume, 1, 0, 1f);
};
}
答案 0 :(得分:1)
spool
是null
。当你在这里打电话时:
spool.load(this, soundID ,1);
您将获得nullPointerException
。在使用之前,您需要先将其初始化。例如:
spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
我建议你再看一些像this这样的教程,因为你的代码中还有其他一些错误。您必须首先加载声音并获取ID,然后将该ID传递给play
。您不能只将R.raw.reset_button
传递给play
,它将无效。