Java 声音池崩溃应用程序

Java 声音池崩溃应用程序,java,android,crash,counter,soundpool,Java,Android,Crash,Counter,Soundpool,我对java有点陌生,所以如果我犯了一个非常愚蠢的错误,请容忍我。 我试图在使用SoundPool在计数器应用程序上单击按钮时播放声音,但是 单击其中一个按钮时,应用程序崩溃。 编译期间不会显示任何错误。 这是密码 package com.example.c0unter; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; impor

我对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);
    };

}

spool
null
。当你在这里叫它:

spool.load(this, soundID ,1);
您将得到一个
nullPointerException
。你需要在使用它之前先初始化它。例如:

spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

我建议您再看一下一些教程,比如其中一个,因为代码中还有一些其他错误。您必须首先加载声音并获取ID,然后将该ID传递给
play
。您不能将
R.raw.reset_按钮
传递到
play
,它将不起作用。

您会粘贴故障的logcat输出吗?我修复了问题并设法获得声音播放,但在我单击按钮20次左右后声音停止播放。应用程序现在没有崩溃。知道为什么吗@肯沃尔夫:太好了!对于新的错误,我不是100%肯定。如果您仍然遇到问题,我建议您提交一个新问题,其中包含更新的代码和相关详细信息。似乎每次单击按钮时,我都在创建一个新的声音池,我猜它只是内存不足。修好了,现在可以正常工作了。谢谢