这里是错误跟踪从安卓错误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(假);
我试图在我的设备上重新创建此错误,但不能。我不明白为什么我得到这个错误。如果有任何高级成员可以指导我或帮助我弄清楚这一点,我会很感激。谢谢。
所以我应该像这样只声明一次或在这两种方法?或者只是在顶部声明一次? – NoviceMe
如果您从原始文件夹播放歌曲,最好使用第二种方法。第一种方法用于播放SD卡或网址中的歌曲。 –
我很抱歉再次发现你。我仍然没有得到它?我真的很感激你能否告诉我代码中的哪些地方应该改变? – NoviceMe