Java Android:OnClick play random.mp3 from/res/raw文件

Java Android:OnClick play random.mp3 from/res/raw文件,java,android,android-mediaplayer,filenotfoundexception,Java,Android,Android Mediaplayer,Filenotfoundexception,我是Android应用程序开发的新手,我正在尝试播放/res/raw文件夹中的random.mp3 修复了到目前为止,我已经解决了这个问题,但是我遇到了一个FileNotFoundException 已修复仅在第一次单击时播放随机声音,之后播放相同的声音,除非重新打开应用程序 新发行的现在播放随机声音,但当我多次单击按钮时,声音同时开始播放,并且仍然会在日志中看到“start()mUri is null”消息 更新代码 MediaPlayer player; int soundIndex; As

我是Android应用程序开发的新手,我正在尝试播放/res/raw文件夹中的random.mp3

修复了到目前为止,我已经解决了这个问题,但是我遇到了一个FileNotFoundException

已修复仅在第一次单击时播放随机声音,之后播放相同的声音,除非重新打开应用程序

新发行的现在播放随机声音,但当我多次单击按钮时,声音同时开始播放,并且仍然会在日志中看到“start()mUri is null”消息

更新代码

MediaPlayer player;
int soundIndex;
AssetFileDescriptor descriptor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}


/**
 * gets a random index from an array of sounds
 * 
 * @return
 */
public int getRandomSoundIndex(){

    int soundIndex;
    int[] sound = SOUNDZ;

    Random random = new Random();
    soundIndex = random.nextInt(sound.length);

    return sound[soundIndex];
}

/**
 * Plays that random sound on button click
 * @param button
 */
public void playRandomSound(View button){

    //where button is physically located
    button = (Button) findViewById(R.id.button1);

    //get random sound index
    soundIndex = getRandomSoundIndex();

    //make media player
    player = MediaPlayer.create(this, soundIndex);

    //play sound
    player.start();

}
以下是日志:



09-21 17:42:32.528:D/MediaPlayer(4282):start()mUri为空

您在这里遇到了一些问题

首先,在
字段上调用
toString()
将为您提供对象实例的字符串表示,例如
“public static final int com.lena.button.R$raw.laptopkeyboard1”
,这不是很有用。大概您想要
getInt()

其次,原始资源不是资产,因此您不使用
openFd()
。相反,使用静态
create()
方法创建
MediaPlayer
实例,在
字段上传递从
getInt()
获得的
int

第三,反思是缓慢的。请不要这样做超过一次。使用
R.raw.class.getFields()
一次,缓存结果。或者,更好的是,不要考虑使用反射,而是使用你自己的文字java <代码> int []/COD>:

static int[] SOUNDZ={R.raw.boom, R.raw.chaka, R.raw.laka};

(当然,请输入您自己的声音资源)

谢谢!我让它在第一次点击时使用我自己的文字javaint[]播放随机声音,现在当我再次点击按钮时,它播放相同的声音。有没有办法重置按钮点击?日志中写着“MediaPlayer(4282):start()mUri为空”这是什么意思?@LenaSanch:“有办法重置按钮点击吗?”--
create()
一个新的
MediaPlayer
,好的。