2013-07-30 205 views
0

我對Java很陌生,所以如果我犯了一個非常愚蠢的錯誤,請耐心等待。 我試圖在使用SoundPool在計數器應用程序上單擊按鈕時播放聲音,但當按下任一按鈕時,該應用程序會崩潰。 編譯期間不顯示錯誤。 這是代碼。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

你會爲崩潰粘貼logcat輸出嗎? – loeschg

回答

1

spoolnull。當您在此處撥打電話:

spool.load(this, soundID ,1); 

您將收到nullPointerException。在使用它之前,您需要先初始化它。例如:

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

我建議你也必須通過一些像this一個教程再看看,因爲在你的代碼中的一些其他錯誤。您必須先加載聲音並獲取ID,然後將該ID傳遞到play。你不能只通過R.raw.reset_buttonplay,它不會工作。

+0

我解決了這些問題,並設法播放聲音,但按下按鈕20次後,聲音停止播放。該應用程序現在不會崩潰。 任何想法爲什麼? @KenWolf –

+0

太棒了!對於新的錯誤,我不是100%肯定的。如果您仍然遇到問題,我建議您提交一個新的問題,更新代碼和相關詳細信息。 –

+1

似乎我每次點擊一個按鈕時都會創建一個新的SoundPool,並且它只是用完了我猜的內存。修復它,它現在工作正常。 謝謝! –