Android Mediaplayer
你好,我是android的新程序员。我有一个程序可以“播放”“暂停”和“停止”本地.mp3文件。我在这里找到了这个网站的信息来源 所以我在代码中发布,所有的东西看起来都很好,直到我真正点击play并得到一个错误 我试着读懂错误,但不知道它到底在说什么 我的错误是(logcat): 阶级 XmlAndroid Mediaplayer,android,android-mediaplayer,Android,Android Mediaplayer,你好,我是android的新程序员。我有一个程序可以“播放”“暂停”和“停止”本地.mp3文件。我在这里找到了这个网站的信息来源 所以我在代码中发布,所有的东西看起来都很好,直到我真正点击play并得到一个错误 我试着读懂错误,但不知道它到底在说什么 我的错误是(logcat): 阶级 Xml 编辑修复程序: 当我把我原来的mp3转换成压缩格式时,它是如何在复制到原始文件夹的过程中被破坏的。所以我只是重新压缩了拷贝,然后砰的一声。一切正常!感谢@MattWolfe在调用其方法之前,找出第5
编辑修复程序:
当我把我原来的mp3转换成压缩格式时,它是如何在复制到原始文件夹的过程中被破坏的。所以我只是重新压缩了拷贝,然后砰的一声。一切正常!感谢@MattWolfe在调用其方法之前,找出第53行上的内容并添加一个检查,以确保任何对象(位于左侧)都不为null。在调用初始化mediaPlayer()的方法之前,您正在设置onClickListener。由于mediaPlayer未在onClickListener中初始化,因此会抛出NullPointerException
在onCreate中,在设置onClickListeners之前调用initMediaPlayer。使用
MediaPlayer
screate()
方法:
你的情况就是这样。有关解决问题的更多信息,请阅读本文档和本文档。您的媒体资源是否正常?用一个uri试试看它是否有效(你可以使用一些在线mp3文件的url)第53行是mediaPlayer.start()看不出有什么问题吗?用你自己的话说明将我的答案应用于你找到的行意味着什么。你的mediaPlayer为空,这意味着每当你创建mediaPlayer时,都会出现问题。^^^我知道这一点,chris我想看到的是我在整个项目中没有看到1个null?看起来你的mediaPlayer对象是null。从上面的代码中,我看不出这是怎么可能的。有没有其他你没有发布的代码(可能是关于Pause或onDestroy方法?@Mattwolve没有,就这些了。也不会对我产生任何影响。尝试更改:mediaPlayer=mediaPlayer.create(cookine.this,R.raw.cookine);for mediaPlayer=mediaPlayer.create(getApplicationContext(),R.raw.com)@Raykud同样的错误:
06-12 12:33:44.551:E/AndroidRuntime(5046):java.lang.NullPointerException 06-12 12:33:44.551:E/AndroidRuntime(5046):在com.reg.ihigh.Cocaine$1.onClick(Cocaine.java:54)
您能将文件更改为使用从中复制代码的示例应用程序中的文件吗?更改引用以同时使用另一个文件,并查看其是否有效。这并不重要,因为您不可能在调用initMediaPlayer之前单击,因为所有事件都会通过UI线程,而在onCreate中不会拾取事件。^^这些问题声音至少播放一次,我的问题甚至不会播放。不知道这是否重要?尝试记录create方法返回的内容。这会让你知道它是否成功,同样重要的是,在崩溃之前是否尝试过。你确定你的文件是有效的mp3吗?另外,您是在模拟器上测试还是在真实设备上测试?Emulator可能不支持此功能。@Reg试试Chris说的话。@Mattwolve Real device(droid x)和mp3文件在windows media player和vlc中播放。
06-12 12:02:38.810: E/AndroidRuntime(4190): FATAL EXCEPTION: main
06-12 12:02:38.810: E/AndroidRuntime(4190): java.lang.NullPointerException
06-12 12:02:38.810: E/AndroidRuntime(4190):atcom.reg.ihigh.Cocaine$1.onClick(Cocaine.java:53)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.view.View.performClick(View.java:2485)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.view.View$PerformClick.run(View.java:9089)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Handler.handleCallback(Handler.java:587)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Handler.dispatchMessage(Handler.java:92)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.os.Looper.loop(Looper.java:123)
06-12 12:02:38.810: E/AndroidRuntime(4190): at android.app.ActivityThread.main(ActivityThread.java:3806)
06-12 12:02:38.810: E/AndroidRuntime(4190): at java.lang.reflect.Method.invokeNative(Native Method)
06-12 12:02:38.810: E/AndroidRuntime(4190): at java.lang.reflect.Method.invoke(Method.java:507)
06-12 12:02:38.810: E/AndroidRuntime(4190): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-12 12:02:38.810: E/AndroidRuntime(4190): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-12 12:02:38.810: E/AndroidRuntime(4190): at dalvik.system.NativeStart.main(Native Method)
package com.reg.ihigh;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Cocaine extends Activity {
MediaPlayer mediaPlayer;
Button buttonPlayPause, buttonQuit;
TextView textState;
private int stateMediaPlayer;
private final int stateMP_NotStarter = 0;
private final int stateMP_Playing = 1;
private final int stateMP_Pausing = 2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.drugg);
buttonPlayPause = (Button)findViewById(R.id.playButton);
buttonQuit = (Button)findViewById(R.id.quitButton);
textState = (TextView)findViewById(R.id.state);
buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);
buttonQuit.setOnClickListener(buttonQuitOnClickListener);
initMediaPlayer();
}
private void initMediaPlayer()
{
mediaPlayer = new MediaPlayer();
mediaPlayer = MediaPlayer.create(Cocaine.this, R.raw.cocaine);
stateMediaPlayer = stateMP_NotStarter;
textState.setText("- IDLE -");
}
Button.OnClickListener buttonPlayPauseOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(stateMediaPlayer){
case stateMP_NotStarter:
mediaPlayer.start();
buttonPlayPause.setText("Pause");
textState.setText("- PLAYING -");
stateMediaPlayer = stateMP_Playing;
break;
case stateMP_Playing:
mediaPlayer.pause();
buttonPlayPause.setText("Play");
textState.setText("- PAUSING -");
stateMediaPlayer = stateMP_Pausing;
break;
case stateMP_Pausing:
mediaPlayer.start();
buttonPlayPause.setText("Pause");
textState.setText("- PLAYING -");
stateMediaPlayer = stateMP_Playing;
break;
}
}
};
Button.OnClickListener buttonQuitOnClickListener
= new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mediaPlayer.stop();
mediaPlayer.release();
finish();
}
};
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/playButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Play"/>
<Button
android:id="@+id/quitButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Quit"/>
<TextView
android:id="@+id/state"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
Returns a MediaPlayer object, or null if creation failed