Java Android应用程序MediaPlayer中的NullPointerException

Java Android应用程序MediaPlayer中的NullPointerException,java,android,eclipse,nullpointerexception,android-mediaplayer,Java,Android,Eclipse,Nullpointerexception,Android Mediaplayer,请帮助这只是我正在开发的一个简单的android应用程序,它意味着每次单击按钮时都会播放声音…当我以较慢的速度单击按钮时,它会工作,但如果我以较快的速度单击按钮,则会因运行时错误而崩溃-NullPointerException!。。。。。我不知道我做错了什么 这是我的密码 公共类主扩展活动实现OnClickListener{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn

请帮助这只是我正在开发的一个简单的android应用程序,它意味着每次单击按钮时都会播放声音…当我以较慢的速度单击按钮时,它会工作,但如果我以较快的速度单击按钮,则会因运行时错误而崩溃-NullPointerException!。。。。。我不知道我做错了什么

这是我的密码

公共类主扩展活动实现OnClickListener{

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button e = (Button) findViewById(R.id.Button1);
    e.setOnClickListener(this);    

}

public void onClick(View v){

    if(v.getId()==R.id.imageButton1){
    final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);
    i.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            i.release();                    
        }
    });

    i.start();  
    }       

}

}

这只是一个猜测,但在文档中您会发现以下内容

publicstaticmediaplayer创建(上下文,intresid)
... 返回MediaPlayer对象,如果创建失败,则返回null

这意味着您应该确保

final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);
不返回
null

编辑:


如果
create(Context-Context,int-resid)
失败,我真的不知道如何处理这种情况。但是你必须这样做,因为从文档中可以很清楚地看到,这是可能发生的

要确定这确实是问题所在,只需忽略此案例并从处理程序返回即可。 例如

public void onClick(View v)
{
    if(v.getId() == R.id.imageButton1)
    {
        final MediaPlayer i = MediaPlayer.create(Main.this, R.raw.sound);

        if (i != null)
        {
            ...

            i.start();
        }
    }       
}
这样试试

public class Blah extends Activity implements OnClickListener {
   MediaPlayer mp;

   @Override 
   public void onCreate(Bundle b)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Button e = (Button) findViewById(R.id.Button1);

      mp = MediaPlayer.create(R.raw.match);
      mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
            i.release();                    
        }
    });

      e.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                   mp.seekTo(0);
                       mp.start();

            }
        });
   }


}
我也有同样的问题

我的解决方案是用蹩脚的mp3编码器重新编码mp3文件

您可以使用以下程序:


显然android对mp3编解码器相当挑剔

这一行->i.setOnCompletionListener(新的OnCompletionListener(){请在尝试使用之前阅读文档,谢谢,但是关于如何使用它有什么想法吗?…因为我几乎不知道该怎么做…再次感谢!如果
create(Context-Context,int-resid),我真的不知道如何处理这种情况
失败。这是您的决定。我已编辑了我的答案。顺便说一句,在对处理程序的任何新调用中,可能不需要创建新的
MediaPlayer
实例。谢谢,我以前尝试过if(I!=null)声明中,它处理了nullPointerException错误,但创建了一个新错误“无法创建媒体播放器”,该错误会阻止程序在几次单击后输出声音……也许我应该第四次查看Android媒体播放器文档,看看我是否遗漏了什么如果我的视频不在原始文件夹?谢谢,将尝试您的方法并立即回复您再次感谢,我刚刚尝试了您的方法,它解决了NullPointerException错误,但在mp.seekTo(0)行创建了一个名为“IllegalStateException”的新错误