Android市场上音乐文件中的NullPointerException错误

时间:2011-12-01 03:25:07

标签: android eclipse

以下是来自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);

我试图在我的设备上重新创建此错误但不能。我不明白为什么我得到这个错误。如果任何高级会员可以指导我或帮助我解决这个问题,我将不胜感激。感谢。

4 个答案:

答案 0 :(得分:0)

之前的行是创建媒体播放器,如果创建失败则返回null。看起来该对象必须为null,当您尝试在mediaPlayer对象上设置循环时抛出NullException。无论如何要找出发送到上下文和songPath的playSong方法的内容?

答案 1 :(得分:0)

答案 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方法。第二种方法不需要它。你可能只选择一种方法,但你的代码似乎同时使用两种方法。