2011-12-01 2 views
1

안드로이드에서 오류 추적 있습니다 :이 코드에오류가 여기에

public class MultiMedia { 
    private static MediaPlayer mediaPlayer; 
    private static AudioManager am; 

    public static int getCurrentPosition() { 
     return mediaPlayer.getCurrentPosition(); 
    } 

    public static int getDuration() { 
     return mediaPlayer.getDuration(); 
    } 

    public static int getMaxVolume() { 
     return am.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
    } 

    public static int getVolume() { 
     return am.getStreamVolume(AudioManager.STREAM_MUSIC); 
    } 

    public static boolean isPuase() { 
     if (mediaPlayer != null) { 
      return isPause; 
     } 
     return false; 
    } 

    public static boolean isStarting() { 
     if (mediaPlayer != null) { 
      return isStarting; 
     } 
     return false; 
    } 

    public static void playSong(Context con, int songPath) { 

     mediaPlayer = new MediaPlayer(); 
     am = (AudioManager) con.getSystemService(Context.AUDIO_SERVICE); 
     mediaPlayer = MediaPlayer.create(con, songPath); 
     mediaPlayer.setLooping(false); 
     mediaPlayer.start(); 

     mediaPlayer.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer arg0) { 

       destroy(); 
      } 

     }); 

    } 

    public static void seek(int msec) { 
     if (mediaPlayer != null) { 

      if (msec >= getDuration()) { 
       msec = getDuration(); 
      } else if (msec <= 0) { 
       msec = 0; 
      } 
      mediaPlayer.seekTo(msec); 
     } 
    } 

    public static synchronized void setVolume(int index) {  
     am.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0); 
    } 

    public static void updatePos(int currentPosition) { 
     pos = currentPosition; 

    } 

    private int intVolume; 

    public static boolean isPause = false, ismute = false; 

    private static boolean isStarting = false; 

    Context context; 

    private static int pos = 0; 

    public static void destroy() { 
     if (mediaPlayer != null) { 
      mediaPlayer.stop(); 
      mediaPlayer.release(); 
      mediaPlayer = null; 
      isStarting = false; 

     } 
    } 

    public static void pause() { 
     if (mediaPlayer != null) { 
      mediaPlayer.pause(); 
      isPause = true; 
     } 
    } 

    public static void play(Context con, int resource) { 
     if (!ismute) { 
      if (mediaPlayer != null) { 
       mediaPlayer.start(); 

       isPause = false; 
       isStarting = true; 
      } else { 
       playSong(con, resource); 
      } 
     } 
    } 

    public static void stop() { 
     if (mediaPlayer != null) { 
      mediaPlayer.seekTo(0); 
      mediaPlayer.pause(); 
     } 
    } 

    public MultiMedia(Context con) { 
     this.context = con; 
     am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
     mediaPlayer = new MediaPlayer(); 

    } 

    public boolean getMute() { 
     return getVolume() == 0; 
    } 

    public String getSongName() { 
     return "this is song name"; 
    } 

    public void setMute(Boolean isOn) { 
     if (mediaPlayer != null) { 
      if (isOn) { 
       intVolume = getVolume(); 
       am.setStreamMute(AudioManager.STREAM_MUSIC, true); 
      } else { 
       am.setStreamMute(AudioManager.STREAM_MUSIC, false); 
       setVolume(intVolume); 
      } 
     } 
    } 

} 

라인 (48)은 다음과 같습니다 : mediaPlayer.setLooping (

다음
java.lang.NullPointerException 
at com.bappy.cror.MultiMedia.playSong(MultiMedia.java:48) 
at com.bappy.cror.MultiMedia.play(MultiMedia.java:132) 
at com.bappy.cror.MainActivity$1.onClick(MainActivity.java:146) 
at android.view.View.performClick(View.java:2408) 
at android.view.View$PerformClick.run(View.java:8816) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4633) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
at dalvik.system.NativeStart.main(Native Method) 

내 코드입니다 그릇된);

내 장치에서이 오류를 다시 작성하려고 시도했지만 기울어졌습니다. 내가 왜이 오류가 발생하는지 이해가 안된다. 어떤 고위 회원이 나를 인도 할 수 있는지 또는이 문제를 파악할 수 있도록 도와 주시면 감사하겠습니다. 감사.

답변

0

당신은 다음과 같이 MediaPlayer를 시작해야 찾을 수 있습니다.

1.MediaPlayer player=new MediaPlayer(); 

player.setDataSource(String path); 

player.prepare(); 

또는

2.MediaPlayer player=MediaPlayer.create(ctx,SongPath); 

당신이 첫 번째 방법으로 재생하려는 경우, 당신은 method.In에게 두 번째 방법을 준비 사용해야합니다 it.You 필요가 하나의 방법만을 선택하지 수도 있지만, 코드가 보인다 둘 다 사용하는 것.

+0

그래서 나는 이렇게 한 번만 선언하거나 두 가지 방법으로 그렇게 선언해야합니까? 아니면 한번 선언하십시오. – NoviceMe

+0

원시 폴더에서 노래를 재생하는 경우 두 번째 방법을 사용하는 것이 좋습니다. 첫 번째 방법은 sdcard 또는 url에서 노래를 재생하는 데 사용됩니다. –

+0

다시 버그를해서 죄송합니다. 나는 아직도 그것을 얻지 않았다? 코드에서 어디에서 변경해야하는지 알려 주시면 정말 감사하겠습니다. – NoviceMe

0

생성이 실패하면 null을 반환하는 미디어 플레이어가 생성됩니다. mediaPlayer 객체에서 루핑을 설정하려고 할 때 객체가 null이어야 NullException을 던지는 것처럼 보입니다. 컨텍스트와 songPath에 대한 playSong 메서드로 보내지는 것이 무엇인지 알아낼 수 있습니까? 참조에서

0

MediaPlayer.create (..)는 null, 내가 생각하는 두 번째 PARAM이 확실히 'songPath'을하기 위해선, 예외의 원인이 될 수있다 적절하게