Java Android Media Player返回NullPointerException
我知道周围也有类似的问题,但所有的答案都是针对这些应用程序的。我收到一个nullpointerexception,但无法理解该问题。这是一个很长的活动课,所以我不能分享。对不起,如果这不是一个明确的问题,但我所需要的是一些提示或想法,我如何才能找到这个异常的原因LOGCAT: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
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是一个状态机——如果你以错误的顺序调用它的方法,你就会遇到问题。还有两种初始化播放器的方法:
mp = MediaPlayer.create(this, R.raw.entermail);
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()中使用的文件,并确保:
在本例中,“原始”资源是系统不会尝试以任何特定方式解析的文件。但是,此资源的内容不应为原始音频。它应该是一个正确编码和格式化的媒体文件,采用支持的格式之一
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是一个状态机-如果您以错误的顺序调用其方法,您会遇到问题。还有两种初始化播放器的方法:
mp = MediaPlayer.create(this, R.raw.entermail);
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()中使用的文件,并确保:
在本例中,“原始”资源是系统不会尝试以任何特定方式解析的文件。但是,此资源的内容不应为原始音频。它应该是一个正确编码和格式化的媒体文件,采用支持的格式之一
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吗