2013-07-30 10 views
0

저는 아주 새로운 자바 프로그램입니다. 그래서 매우 어리석은 실수를 저 지르면 나와 함께 감내하십시오. 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을 만들고있는 것 같았습니다. 고쳐서 이제는 잘 작동합니다. 감사합니다. –

관련 문제