2013-05-19 1 views
0

누군가가 뛰어 내릴 때 마리오 점프 사운드를 재생하는 작은 프로그램을 만들고 있습니다. 10 m/s^2와 같은 특정 값에 도달하면 프로그램이 메시지를 표시하도록 Z 가속을 사용할 수 있습니다. 미디어 플레이어 개체에서 소리를 내고 싶지만 미디어 플레이어 개체를 만들 때 코드가 충돌합니다. 나는 pastebin에 코드를 게시 할 것이다.왜 Media Player 객체를 만들면 내 안드로이드 코드가 충돌합니까?

MediaPlayer mp; //keep this where the current line is 
mp = MediaPlayer.create(getBaseContext(),R.raw.jump); //Put this in onCreate() 

앱을 다음과 같이

public class MainActivity extends Activity implements SensorEventListener { 
     Sensor accelerometer; 
     SensorManager sm; 
     TextView acceleration; 
    MediaPlayer mp = MediaPlayer.create(getBaseContext(),R.raw.jump); //Line 17 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       sm= (SensorManager)getSystemService(SENSOR_SERVICE); 
       accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
       sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);   
       acceleration = (TextView) findViewById(R.id.acceleration);    

     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
       // Inflate the menu; this adds items to the action bar if it is present. 
       getMenuInflater().inflate(R.menu.main, menu); 
       return true; 
     } 

     @Override 
     public void onAccuracyChanged(Sensor sensor, int accuracy) { 
       // TODO Auto-generated method stub 


     } 

     @Override 
     public void onSensorChanged(SensorEvent event) { 
       // TODO Auto-generated method stub  
       acceleration.setText("X: " + event.values[0] + "\nY: " + event.values[1] + "\nZ: " + event.values[2]); 
       if (event.values[2] > 10.8) { 
         acceleration.setText("Z IS REALLY BIG!!"); 
       } 
     } 

} 
라인 (17)의 추가 프로그램을 추락 것입니다

...

답변

1

당신은 두 부분으로

MediaPlayer mp = MediaPlayer.create(getBaseContext(),R.raw.jump); 

을 분할해야 메서드 본문 외부에서 mp을 초기화했기 때문에 충돌이 발생했습니다. 이는 실행 된 것을 의미합니다. b efore onCreate(). onCreate()이 호출 될 때까지 Activity 객체가 준비되지 않았기 때문에 getBaseContext()을 호출하면 NullPointerException이됩니다.

+0

감사! 그게 정말 굉장합니다. – Nathvi