我有一个声音,我想在按钮点击时播放。在许多活动中发出相同的声音。因此,我认为创建一个具有播放声音的方法的 Utility 类可能是个好主意,我将从各种活动中调用它,而不是在所有其他活动中创建 MediaPlayer 变量。所以我创建了这个实用程序类:
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...
}
但是当我单击按钮时 - 我的应用程序崩溃了。我做错了什么,我该如何解决?
您的代码崩溃是因为 Utilities
的 onCreate()
方法永远不会被调用,因为您不将其用作普通Activity
,并且它不遵循 Activity 生命周期。因此,您的this
引用将始终为空。
相反,尝试将其设置为普通的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()
或之后。