2014-09-26 99 views
0

我刚做了一个播放声音的示例应用程序。玩的作品,但如果我按下按钮我的应用程序崩溃。代码似乎是在我眼中是正确的:MediaPlayer崩溃onStop()

public class MainActivity extends Activity { 

private MediaPlayer mediaPlayer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    playAlarm(); 
    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new ButtonClick()); 
} 

private void playAlarm() { 
    Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
    try { 
     mediaPlayer.setDataSource(this, alert); 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM); 
     mediaPlayer.setLooping(true); 
     mediaPlayer.prepare(); 
     mediaPlayer.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

private class ButtonClick implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     mediaPlayer.stop(); //Getting a NullPointerException 
     finish(); 
    } 
} 

@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 boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

我不知道如何解决这个问题。 在此先感谢!

+0

你正在得到什么错误?另外,发布堆栈跟踪 – CarCzar 2014-09-26 21:55:26

回答

1

假设您在单击按钮之前确实有playAlarm()发生。在mediaPlayer.setDataSource(this,alert)之前需要mediaPlayer = new MediaPlayer(); (这里还有其他错误,但这是NPE的原因)。你也应该删除e.printstackTrace()并让它发生。