下面的代码不会破坏方法或循环,而是会永远循环播放音乐。当(n==maxCount)时,应更改n=1的值并从OnCompletionListener中发出,即音乐应停止播放,这就是我想要的。

我怎样才能解决这个问题 ?

    protected void playsound() {
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    return;
                }
            }
        }
    });
    mp.start();


maxCount值取决于Spinner值,并且n=1全局声明。

以下是正确运行的更正代码,下面的代码是否有任何错误?因为有些用户说:“使用此代码,您将面临丢失退出条件的危险,因为如果输入时n == maxCount,那么在n ++之后,n> maxCount。简而言之,它将一直运行到您遇到maxint为止,然后会崩溃”
 ?

protected void playsound() {
    // TODO Auto-generated method stub
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n<=maxCount) {
                mp.start();
                n++;
                if(n==maxCount){
                    n=1;
                    mp.pause();
                    mp.seekTo(0);

                }
            }
        }
    });
    mp.start();
}

最佳答案

编辑:

您无法使用mp.start();停止音乐,而需要使用mp.stop()



您正在检查if (n<maxCount) {

在相同的条件下,您正在检查n==maxCount,在世界范围内,值小于等于该数字的数字的意义,即n==maxCount永远不会满足
所以你需要像这样改变条件

if(n<=maxCount)



  下面的代码不会破坏方法或循环,而是会永远循环播放音乐


是的,因为您的return语句永远不会满足n == maxCount

10-04 18:12