2016-12-29 6 views
1

버튼을 누르면 소리를 재생하는 전화 걸기 앱을 만들고 있는데 앱이 훌륭하게 작동하지만 잠시 후 준비된 수신기 때문에 무작위 충돌이 발생합니다. 나는 미디어 플레이어null 객체 참조에 준비된 수신기의 Android 미디어 플레이어

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(); 

} 

다른 사람들을 위해서도 똑같이하십시오. 이 작업을 수행하는 훨씬 더 좋은 방법이 있지만 코드와 마찬가지로 이것은 가장 짧습니다.