2016-12-29 7 views
1

ボタンを押したときにサウンドを再生する電話機のダイヤラーアプリを作成していますが、アプリがうまくいきましたが、しばらくしてから準備ができたリスナーで私はメディアプレーヤーヌードオブジェクトリファレンスで準備されたリスナーのアンドロイドメディアプレーヤー

if (mLastButton == one) { 
           MediaPlayer mediaPlayer ; 
           mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.one); 
           mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
            @Override 
            public void onPrepared(MediaPlayer mediaPlayer) { 
             mp1.start(); 
            } 
           }); 
           mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
            @Override 
            public void onCompletion(MediaPlayer mediaPlayer) { 
             mp1.release(); 
            } 
           }); 

          } 
          if (mLastButton == two) { 
           MediaPlayer mediaPlayer ; 
           mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.two); 
           mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
            @Override 
            public void onPrepared(MediaPlayer mediaPlayer) { 
             mp2.start(); 
            } 
           }); 
           mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
            @Override 
            public void onCompletion(MediaPlayer mediaPlayer) { 
             mp2.release(); 
            } 
           }); 

          } 
          if (mLastButton == three) { 
           MediaPlayer mediaPlayer ; 

           mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.three); 
           mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
            @Override 
            public void onPrepared(MediaPlayer mediaPlayer) { 
             mp3.start(); 
            } 
           }); 
           mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
            @Override 
            public void onCompletion(MediaPlayer mediaPlayer) { 
             mp3.release(); 
            } 
           }); 

          } 
          if (mLastButton == four) { 
           MediaPlayer mediaPlayer ; 
           mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.four); 
           mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
            @Override 
            public void onPrepared(MediaPlayer mediaPlayer) { 
             mp4.start(); 
            } 
           }); 
           mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
            @Override 
            public void onCompletion(MediaPlayer mediaPlayer) { 
             mp4.release(); 
            } 
           }); 
          } 
アプリが正常に動作している

と同じボタンをキャストする方法はない何が起こっているか知っていて、これがエラー

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setOnPreparedListener(android.media.MediaPlayer$OnPreparedListener)' on a null object reference 
                       at com.alper.pola.andoid.phonedailer.MainActivity$1.onTouch(MainActivity.java:258) 

であり、これはときに私はそれをクリックして取り組んでいるが、その後ボタンが機能しなくなり、すべてのボタンでこのクラッシュが発生するうまく動作し始めますが、いくつかの数字を入力するとアプリケーションのクラッシュが発生します

+0

あなたの活動のコード全体を投稿してください。問題を簡単に解決するのに役立ちます。 –

+0

"mp3を呼び出すのではなく、onPreparedメソッドに渡される" mediaPlayer "パラメータをmediaPlayerインスタンスに直接設定して渡すのではなく、 – Starlord

+0

を使用していません。どこ?それはいつも同じ数の数字ですか? –

答えて

0

MediaPlayerを扱う際には非常に効率的ではありません。それでも私はあなたにこのコードの回避策をお手伝いします。コールを開始するには、mediaPlayer.prepare()を使用します。このコードをチェックアウト:

if (mLastButton == one) { 

    mp1 = MediaPlayer.create(MainActivity.this,R.raw.one); 
    mp1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      mp1.start(); 
    }); 
    mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mediaPlayer) { 
      mp1.release(); 
      } 
    }); 
    mp1.prepare(); 

} 

他の人も同様です。これを行うには、はるかに良い方法がありますが、コードと同様に、これは最短です。

関連する問題