Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Media Player返回NullPointerException_Java_Android_Exception_Nullpointerexception - Fatal编程技术网

Java Android Media Player返回NullPointerException

Java Android Media Player返回NullPointerException,java,android,exception,nullpointerexception,Java,Android,Exception,Nullpointerexception,我知道周围也有类似的问题,但所有的答案都是针对这些应用程序的。我收到一个nullpointerexception,但无法理解该问题。这是一个很长的活动课,所以我不能分享。对不起,如果这不是一个明确的问题,但我所需要的是一些提示或想法,我如何才能找到这个异常的原因LOGCAT: 12-25 10:54:31.845: E/MediaPlayer(14465): error (1, -2147483648) 12-25 10:54:31.865: E/AndroidRuntime(14465): F

我知道周围也有类似的问题,但所有的答案都是针对这些应用程序的。我收到一个nullpointerexception,但无法理解该问题。这是一个很长的活动课,所以我不能分享。对不起,如果这不是一个明确的问题,但我所需要的是一些提示或想法,我如何才能找到这个异常的原因LOGCAT:

12-25 10:54:31.845: E/MediaPlayer(14465): error (1, -2147483648)
12-25 10:54:31.865: E/AndroidRuntime(14465): FATAL EXCEPTION: main
12-25 10:54:31.865: E/AndroidRuntime(14465): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sametenekeci.vmail/com.st.vmail.MainActivity}: java.lang.NullPointerException
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2079)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread.access$600(ActivityThread.java:132)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1157)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.os.Looper.loop(Looper.java:137)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread.main(ActivityThread.java:4575)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at java.lang.reflect.Method.invokeNative(Native Method)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at java.lang.reflect.Method.invoke(Method.java:511)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at dalvik.system.NativeStart.main(Native Method)
12-25 10:54:31.865: E/AndroidRuntime(14465): Caused by: java.lang.NullPointerException
12-25 10:54:31.865: E/AndroidRuntime(14465):    at com.sametenekeci.vmail.MainActivity.onCreate(MainActivity.java:90)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.Activity.performCreate(Activity.java:4465)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-25 10:54:31.865: E/AndroidRuntime(14465):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2033)
12-25 10:54:31.865: E/AndroidRuntime(14465):    ... 11 more
谢谢你的帮助

添加:

更改它:

mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                // Rest of Code
            }
        });
更改它:

mp.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                // TODO Auto-generated method stub
                // Rest of Code
            }
        });
我知道为什么(也许:) 在方法setAppState()u调用try-catch块中的mp.prepare(),然后在try-catch块外部调用mp.start()mp.prepare()可能导致异常

调用mp.start()以确保mp已成功准备

try {
    mp.prepare();
    mp.start();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
我知道为什么(也许:) 在方法setAppState()u调用try-catch块中的mp.prepare(),然后在try-catch块外部调用mp.start()mp.prepare()可能导致异常

调用mp.start()以确保mp已成功准备

try {
    mp.prepare();
    mp.start();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

您的行号
90
导致空指针异常

line number 90: mp.setOnCompletionListener(new OnCompletionListener() {
nullPointerException
的原因是,您尚未初始化媒体播放器: //首先初始化它

MediaPlayer mp= new MediaPlayer();
然后 根据需要使用它,如下所示:

mp= new MediaPlayer();
mp = MediaPlayer.create(this, R.raw.entermail);
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

您的行号
90
导致空指针异常

line number 90: mp.setOnCompletionListener(new OnCompletionListener() {
nullPointerException
的原因是,您尚未初始化媒体播放器: //首先初始化它

MediaPlayer mp= new MediaPlayer();
然后 根据需要使用它,如下所示:

mp= new MediaPlayer();
mp = MediaPlayer.create(this, R.raw.entermail);
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

MediaPlayer是一个状态机——如果你以错误的顺序调用它的方法,你就会遇到问题。还有两种初始化播放器的方法:

  • 使用create()方法-在本例中:

    mp = MediaPlayer.create(this, R.raw.entermail);
    
  • 这一行将使用作为参数传递的资源声音初始化播放机。如果成功,prepare()将已被调用,不得再次调用

    您在此行中遇到错误:

    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    
    这表示mp为空。设置侦听器之前,请检查create()的结果:

    if (mp != null) {
        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        // rest of the code
    }
    else {
        Log.d("AUDIO", "MediaPlayer.create() failed. mp is null");
        // deal with it accordingly
    }
    
    在您的情况下,请检查您在create()中使用的文件,并确保:

    在本例中,“原始”资源是系统不会尝试以任何特定方式解析的文件。但是,此资源的内容不应为原始音频。它应该是一个正确编码和格式化的媒体文件,采用支持的格式之一

  • 您可以使用构造函数创建MediaPlayer对象:

    mp = new MediaPlayer();
    
  • 然后记住设置数据源并准备:

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(getApplicationContext(), myUri);
        mediaPlayer.prepare();
    
        //when ready
        mediaPlayer.start();
    
    记住捕获setDataSource上的异常。还记得在完成MediaPlayer对象时对其调用release()

    顺便说一句,在设置侦听器后,您将调用setAppState(),后者将依次调用:

    mp.reset();
    mp.setDataSource();
    mp.prepare();
    mp.start();
    
    因此,您最好使用第二种方法初始化播放器,并设置OneRorListener以检查是否存在任何错误


    还建议在单独的线程上调用任何长操作(如prepare()),以免阻塞UI线程。请通读本指南并阅读有关状态的内容,它将帮助您了解正在发生的事情。

    MediaPlayer是一个状态机-如果您以错误的顺序调用其方法,您会遇到问题。还有两种初始化播放器的方法:

  • 使用create()方法-在本例中:

    mp = MediaPlayer.create(this, R.raw.entermail);
    
  • 这一行将使用作为参数传递的资源声音初始化播放机。如果成功,prepare()将已被调用,不得再次调用

    您在此行中遇到错误:

    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    
    这表示mp为空。设置侦听器之前,请检查create()的结果:

    if (mp != null) {
        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        // rest of the code
    }
    else {
        Log.d("AUDIO", "MediaPlayer.create() failed. mp is null");
        // deal with it accordingly
    }
    
    在您的情况下,请检查您在create()中使用的文件,并确保:

    在本例中,“原始”资源是系统不会尝试以任何特定方式解析的文件。但是,此资源的内容不应为原始音频。它应该是一个正确编码和格式化的媒体文件,采用支持的格式之一

  • 您可以使用构造函数创建MediaPlayer对象:

    mp = new MediaPlayer();
    
  • 然后记住设置数据源并准备:

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setDataSource(getApplicationContext(), myUri);
        mediaPlayer.prepare();
    
        //when ready
        mediaPlayer.start();
    
    记住捕获setDataSource上的异常。还记得在完成MediaPlayer对象时对其调用release()

    顺便说一句,在设置侦听器后,您将调用setAppState(),后者将依次调用:

    mp.reset();
    mp.setDataSource();
    mp.prepare();
    mp.start();
    
    因此,您最好使用第二种方法初始化播放器,并设置OneRorListener以检查是否存在任何错误


    还建议在单独的线程上调用任何长操作(如prepare()),以免阻塞UI线程。请通读指南并阅读有关州的信息,它将帮助您了解发生了什么。

    您好,您可以通过在清单中添加
    来解决问题。

    您好,您可以通过在清单中添加
    来解决问题。
    MainActivity.java中的第90行是什么。它会导致错误。如果没有java代码,甚至很难判断它是什么错误。发布
    MainActivity
    @GrlsHu MainActivity的代码:你能指出MainActivity.java中的第90行@sametenekeci吗。它会导致错误。如果没有java代码,甚至很难判断它是什么错误。发布
    MainActivity
    @GrlsHu MainActivity的代码:你能指出第90行@sametenekeci吗