点击按钮时,我想要播放声音。许多活动都有同样的声音。所以我认为创建一个具有播放声音的方法的Utility类是个好主意,我将从各种活动中调用它,而不是在所有其他活动中创建MediaPlayer变量。所以我创建了这个Utility类:
public class Utilities extends Activity {
public MediaPlayer mpPositive;
public MediaPlayer mpNegative;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mpPositive = MediaPlayer.create(this, R.raw.click_positive);
mpNegative = MediaPlayer.create(this, R.raw.click_negative);
}
public void playPositive() {
mpPositive.start();
}
}
在我的活动中,我导入了这个文件。然后我尝试使用它:
public class ActivityListCategories extends ListActivity implements
OnClickListener {
private Utilities myUtilities;
...rest of the code...
public void onCreate(Bundle savedInstanceState) {
myUtilities = new Utilities();
...rest of the code...
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnAdd:
myUtilities.playPositive();
...rest of the code...
}
但是当我点击按钮时 - 我的应用程序崩溃了。我做错了什么,如何解决?
答案 0 :(得分:1)
您的代码崩溃是因为onCreate()
Utilities
方法永远不会被调用,因为您不将其用作普通Activity
,并且它不遵循活动生命周期。因此,您的this
引用将始终为null。
相反,尝试使其成为普通的Java类,如:
public class Utilities extends Activity {
public MediaPlayer mpPositive;
public MediaPlayer mpNegative;
public Utilities(Context context) {
mpPositive = MediaPlayer.create(context, R.raw.click_positive);
mpNegative = MediaPlayer.create(context, R.raw.click_negative);
}
public void playPositive() {
mpPositive.start();
}
}
然后按如下方式创建一个对象:
Utilities utils = new Utilities(this);
确保此行位于onCreate()
或主要活动之后。