0

ヘルプお願いしますこれは私が開発している単純なAndroidアプリで、ボタンをクリックするたびに音を鳴らすことを目的としています....ボタンをゆっくりとクリックすると機能しますが、ボタンをクリックすると常にクラッシュしますランタイムエラーによる速いペース-NullPointerException!.....何が間違っているのかわかりません。

これは私のコードです

パブリッククラスMainextendsActivityはOnClickListenerを実装します{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button e = (Button) findViewById(R.id.Button1);
    e.setOnClickListener(this);    

}

public void onClick(View v){

    if(v.getId()==R.id.imageButton1){
    final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);
    i.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            i.release();                    
        }
    });

    i.start();  
    }       

}

}

4

3 に答える 3

1

それは単なる推測ですが、ここのドキュメントには次のようなものがあります

public static MediaPlayer create (Context context, int resid) ... MediaPlayerオブジェクトを返します。作成に失敗した場合は、nullを返します。

これは、次のことを確認する必要があることを意味します

final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);

を返しませんnull

編集:

create(Context context, int resid)が失敗した場合の状況の処理方法が本当にわかりません。しかし、それが起こり得ることはドキュメンテーションからさえ非常に明白であるため、あなたはしなければなりません。

これが本当に問題であることを確認するには、このケースを無視してハンドラーから戻ってください。例えば...

public void onClick(View v)
{
    if(v.getId() == R.id.imageButton1)
    {
        final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);

        if (i != null)
        {
            ...

            i.start();
        }
    }       
}
于 2012-11-11T15:43:24.057 に答える
0

このように試してみてください。

public class Blah extends Activity implements OnClickListener {
   MediaPlayer mp;

   @Override 
   public void onCreate(Bundle b)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Button e = (Button) findViewById(R.id.Button1);

      mp = MediaPlayer.create(R.raw.match);
      mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            i.release();                    
        }
    });

      e.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                   mp.seekTo(0);
                       mp.start();

            }
        });
   }


}
于 2012-11-11T15:46:21.507 に答える
0

私は同じ問題を抱えていました

私の解決策は、LAMEmp3エンコーダーでmp3ファイルを再エンコードすることでした

このプログラムを使用できます:http://www.freac.org/index.php/en/downloads-mainmenu-33

どうやらアンドロイドはmp3コーデックについてかなりうるさいです

于 2013-07-31T13:20:14.443 に答える