0

请帮助,这只是我正在开发的一个简单的 android 应用程序,它意味着每次单击按钮时都会播放声音....由于运行时错误而导致的快节奏 - NullPointerException!......我不知道我做错了什么。

这是我的代码

公共类 Main 扩展 Activity 实现 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();  
    }       

}

}

4

3 回答 3

1

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

public static MediaPlayer create (Context context, int resid) ... 返回一个 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();
        }
    }       
}
于 2012-11-11T15:43:24.057 回答
0

试试这个方法......

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();

            }
        });
   }


}
于 2012-11-11T15:46:21.507 回答
0

我有同样的问题

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

你可以使用这个程序:http ://www.freac.org/index.php/en/downloads-mainmenu-33

显然android对mp3编解码器很挑剔

于 2013-07-31T13:20:14.443 回答