无法在 android 上播放声音文件。有运行时错误
can't play a sound file on android. having runtime errors
这是我的代码:
String a = "R.raw."+b;//b is a user input
int toSpeak = Integer.parseInt(a);
sound = MediaPlayer.create(trans.this, toSpeak);
sound.start();
sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
sound.release();
sound = null;
}
});
这些是我的错误:
02-09 05:54:44.998: W/dalvikvm(1392): threadid=1: thread exiting with uncaught exception (group=0xb4a38b90)
02-09 05:54:45.008: E/AndroidRuntime(1392): FATAL EXCEPTION: main
02-09 05:54:45.008: E/AndroidRuntime(1392): Process: com.translator.ite, PID: 1392
02-09 05:54:45.008: E/AndroidRuntime(1392): java.lang.NumberFormatException: Invalid int: "R.raw.abandon"
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.invalidInt(Integer.java:137)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parse(Integer.java:374)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parseInt(Integer.java:365)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parseInt(Integer.java:331)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.translator.ite.trans.onClick(trans.java:60)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.view.View.performClick(View.java:4424)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.view.View$PerformClick.run(View.java:18383)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Handler.handleCallback(Handler.java:733)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Handler.dispatchMessage(Handler.java:95)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Looper.loop(Looper.java:137)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.app.ActivityThread.main(ActivityThread.java:4998)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.reflect.Method.invokeNative(Native Method)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.reflect.Method.invoke(Method.java:515)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-09 05:54:45.008: E/AndroidRuntime(1392): at dalvik.system.NativeStart.main(Native Method)
使用 getIdentifier 获取资源 ID 使用名称:
int toSpeak = getResources().getIdentifier("raw/"+b, null, getPackageName());
我有那种错误。我的最终代码适合我:
final MediaPlayer mPlayer;
mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.primeste_inactiv);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mPlayer.reset();
mPlayer.release();
}
});
我的代码多了一行:
mPlayer.reset();
这是我的代码:
String a = "R.raw."+b;//b is a user input
int toSpeak = Integer.parseInt(a);
sound = MediaPlayer.create(trans.this, toSpeak);
sound.start();
sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
sound.release();
sound = null;
}
});
这些是我的错误:
02-09 05:54:44.998: W/dalvikvm(1392): threadid=1: thread exiting with uncaught exception (group=0xb4a38b90)
02-09 05:54:45.008: E/AndroidRuntime(1392): FATAL EXCEPTION: main
02-09 05:54:45.008: E/AndroidRuntime(1392): Process: com.translator.ite, PID: 1392
02-09 05:54:45.008: E/AndroidRuntime(1392): java.lang.NumberFormatException: Invalid int: "R.raw.abandon"
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.invalidInt(Integer.java:137)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parse(Integer.java:374)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parseInt(Integer.java:365)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.Integer.parseInt(Integer.java:331)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.translator.ite.trans.onClick(trans.java:60)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.view.View.performClick(View.java:4424)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.view.View$PerformClick.run(View.java:18383)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Handler.handleCallback(Handler.java:733)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Handler.dispatchMessage(Handler.java:95)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.os.Looper.loop(Looper.java:137)
02-09 05:54:45.008: E/AndroidRuntime(1392): at android.app.ActivityThread.main(ActivityThread.java:4998)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.reflect.Method.invokeNative(Native Method)
02-09 05:54:45.008: E/AndroidRuntime(1392): at java.lang.reflect.Method.invoke(Method.java:515)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
02-09 05:54:45.008: E/AndroidRuntime(1392): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
02-09 05:54:45.008: E/AndroidRuntime(1392): at dalvik.system.NativeStart.main(Native Method)
使用 getIdentifier 获取资源 ID 使用名称:
int toSpeak = getResources().getIdentifier("raw/"+b, null, getPackageName());
我有那种错误。我的最终代码适合我:
final MediaPlayer mPlayer;
mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.primeste_inactiv);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.start();
mPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mPlayer.reset();
mPlayer.release();
}
});
我的代码多了一行:
mPlayer.reset();