0

单击按钮时,我想播放一种声音。许多活动都发出相同的声音。所以我认为创建一个具有播放声音方法的 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...
}

但是当我单击按钮时 - 我的应用程序崩溃了。我做错了什么,我该如何解决?

4

1 回答 1

1

您的代码崩溃是因为该onCreate()方法Utilities永远不会被调用,因为您没有将它用作正常的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()您的主要活动中或之后。

于 2012-12-01T17:27:33.400 回答