以下是来自android的错误跟踪:
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(false);
我试图在我的设备上重新创建此错误但不能。我不明白为什么我得到这个错误。如果任何高级会员可以指导我或帮助我解决这个问题,我将不胜感激。感谢。
答案 0 :(得分:0)
之前的行是创建媒体播放器,如果创建失败则返回null。看起来该对象必须为null,当您尝试在mediaPlayer对象上设置循环时抛出NullException。无论如何要找出发送到上下文和songPath的playSong方法的内容?
答案 1 :(得分:0)
create()
MediaPlayer
的参数存在问题。
答案 2 :(得分:0)
MediaPlayer.create(..)返回null,我想可能是导致异常的第二个参数, 确保找到'songPath'正确
答案 3 :(得分:0)
你必须像这样开始媒体播放。
1.MediaPlayer player=new MediaPlayer();
player.setDataSource(String path);
player.prepare();
或者
2.MediaPlayer player=MediaPlayer.create(ctx,SongPath);
当你尝试使用第一种方法时,你必须使用prepare方法。第二种方法不需要它。你可能只选择一种方法,但你的代码似乎同时使用两种方法。