2 回答
![?](http://img1.sycdn.imooc.com/5333a1d100010c2602000200-100-100.jpg)
TA贡献1951条经验 获得超3个赞
我认为真正的错误在中间,这行android.content.res.Resources$NotFoundException: Resource ID #0x0 at
提示它找不到您传入的资源。
您传递的资源通常类似于 R.raw.my_resource_name
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
TA贡献1812条经验 获得超5个赞
问题是在以下代码中找不到有效的资源ID:
public void pressed(View view) {
int id = view.getId();
String ourId = "";
ourId = view.getResources().getResourceEntryName(id);
int resourceId = getResources().getIdentifier(ourId, "raw",
"com.example.chakshu.griddemo");
...
}
由于该ID不存在,将在其中抛出getResourceEntryName(),如果找不到有效的资源ID Resources.NotFoundException,则getIdentifier将返回0。
因此,将您的点击监听器方法更新为以下内容:
public void pressed(View view) {
int id = view.getId();
try {
String ourId = getResources().getResourceEntryName(id);
int resId = getResources().getIdentifier(ourId, "raw", getPackageName());
if(resId == 0) {
Log.d("MainActivity", "error, no found raw");
} else {
MediaPlayer mplayer = MediaPlayer.create(this, resourceId);
mplayer.start();
}
} catch(NotFoundException e) {
Log.d("MainActivity", "error, no found resource = " + e.toString);
}
}
而是根据按钮ID名称,尝试使用android:tag和[getTag][3]方法。例如,使用以下按钮:
<Button
android:text="A"
android:tag="raw_resource_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:layout_column="0"
android:layout_row="0"
android:layout_gravity="fill"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:onClick="pressed"/>
然后,您可以使用以下代码:
public void pressed(View view) {
String resName = (String) view.getTag();
int resId = getResources().getIdentifier(resName, "raw", getPackageName());
if(resId == 0) {
Log.d("MainActivity", "error, no found raw");
} else {
MediaPlayer mplayer = MediaPlayer.create(this, resourceId);
mplayer.start();
}
}
添加回答
举报