我几天前开始学习,我试图让这个按钮工作,它只是一个按钮网格,每个应该播放不同的声音,但当我尝试播放任何时它崩溃,几乎所有我的代码是从这个链接http://www.stealthcopter.com/blog/2010/09/android-creating-a-custom-adapter-for-gridview-buttonadapter/和onClick代码是这个,但它不起作用。
public void onClick(View v)
{
// Preform a function based on the position
if(mp!=null){
mp.stop();
mp.release();}
Uri uri = Uri.parse(filenames[this.position]);
mp = MediaPlayer.create(MainActivity.this, uri);
mp.start();
这是我在logcat中得到的错误
03-08 06:38:31.789 11339-11349/com.ntugta.hellogridview E/MediaPlayer﹕ error (1, -2147483648)
03-08 06:38:31.805 11339-11339/com.ntugta.hellogridview D/MediaPlayer﹕ create failed:
java.io.IOException: Prepare failed.: status=0x1
at android.media.MediaPlayer.prepare(Native Method)
at android.media.MediaPlayer.create(MediaPlayer.java:812)
忘记添加,播放文件的数组就是这样。
public String[] filesnames = {
"R.raw.file1",
"R.raw.file2",
"R.raw.file3"
};
修改 不得不用这种播放方式将名称文件更改为此。
public String[] filesnames = {
"file1",
"file2",
"file3"
};
修改
我找到了怎么做,第一个问题是关于if的坏状态,它是.reset();我应该运行什么,而不是.stop()和.release(),第二个错误是Uri,它应该是基于我从数组中获得的字符串的资源标识符,这是最终代码。
String data = filenames[this.position];
if (m != null) {
m.reset();
}
m = MediaPlayer.create(MainActivity.this,getResources().getIdentifier(data, "raw", "com.example.package"));
m.start();
答案 0 :(得分:0)
创建失败,因此返回null。你没有检查过这个,所以当你调用mp.start时你会崩溃。首先,你应该检查mp.create返回null,如果是,则不调用start。其次,你不能做那样的字符串。 R.raw.xxx不是文件名。它是一个资源ID,指的是您可以通过openResource打开的资源。您需要将数据放在可以获取FileDescriptor的位置,例如assets目录。