2011-12-01 57 views
1

这里是错误跟踪从安卓错误NullPointerException异常在Android Market上的音乐文件

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) 

这里是我的代码:

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

我试图在我的设备上重新创建此错误,但不能。我不明白为什么我得到这个错误。如果有任何高级成员可以指导我或帮助我弄清楚这一点,我会很感激。谢谢。

回答

0

你必须启动媒体播放器这样的。

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

如果您从原始文件夹播放歌曲,最好使用第二种方法。第一种方法用于播放SD卡或网址中的歌曲。 –

+0

我很抱歉再次发现你。我仍然没有得到它?我真的很感激你能否告诉我代码中的哪些地方应该改变? – NoviceMe

0

之前的那行是创建媒体播放器,如果创建失败,则返回null。它看起来像那个对象必须是null,当你试图在mediaPlayer对象上设置循环时,它抛出NullException。无论如何要弄清楚什么是发送到playSong方法的上下文和songPath?

0

MediaPlayer.create(..)返回null,我认为可能是第二个PARAM引起例外, 确保“songPath”可以找到正确

相关问题