0

ボタンをクリックしたときに鳴りたい音がします。多くの活動で同じ音。そのため、他のすべてのアクティビティで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()メソッドが呼び出されず、Activity のライフ サイクルに従っていないため、コードがクラッシュします。このため、参照は常に null になります。UtilitiesActivitythis

代わりに、次のような通常の 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 に答える