2017-09-01 58 views
0

我在直播流媒体广播Android应用程序的工作...我有4个轨道的数组,当我到达列表的末尾假设下一个按钮代表“最后一首歌曲“,但它并没有崩溃应用程序。Android的 - 媒体播放器下一个按钮不起作用

这里是按钮的代码:

counter=0; 

    mediaPlayer=new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    btn_next.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      if (counter < songurl.length) { 
       counter = counter + 1; 
       textview.setText(songurl[counter]); 
       try { 
        mediaPlayer.reset(); 
       } catch (Exception ex) { 
        try { 
         mediaPlayer.setDataSource(songurl[counter]); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        try { 
         mediaPlayer.prepare(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        mediaPlayer.start(); 
       } 
      } else { 

       Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

一个问题...的情况下,我想,当应用程序到达最后一首歌,使其闭环,我想下一个启动列表按从一开始我怎么能做到这一点? 谢谢。

+0

放柜台= 1,而不是在1号线 – ramji

回答

-1

为了使你应该是,如果计数器等于这是我觉得在播放列表中的歌曲总数的songurl.length的onclicklistener检查循环。

int counter=0; 

    MediaPlayer mediaPlayer=new MediaPlayer(); 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    btn_next.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      if (counter < songurl.length) { 
       counter = counter + 1; 
       textview.setText(songurl[counter]); 
       try { 
        mediaPlayer.reset(); 
       } catch (Exception ex) { 
        try { 
         mediaPlayer.setDataSource(songurl[counter]); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        try { 
         mediaPlayer.prepare(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        mediaPlayer.start(); 
       } 
      } else if(counter == songurl.length) { 

       counter = 0; 
       // Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show(); 
       textview.setText(songurl[counter]); 
       try { 
        mediaPlayer.reset(); 
       } catch (Exception ex) { 
        try { 
         mediaPlayer.setDataSource(songurl[counter]); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        try { 
         mediaPlayer.prepare(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        mediaPlayer.start(); 
       } 
      } 
     } 
    }); 

在elseif条件中,我已将计数器设置为0.以便它将进入循环。你有

+0

计数器= 0此代码将崩溃仍然以同样的方式原来的代码一样。你不应该检查该计数器是否小于数组的长度,然后增加它。 – Dave

+0

我只是告诉他河套事情的逻辑。我认为逻辑是罚款...... –

0

的一个问题是,你是递增刚过你检查它的范围内,这意味着你的安全检查是无用的计数器。移动counter = counter + 1; if语句的结束。

至于使它不断循环,你可以在if语句体结束其更改为counter = (counter + 1) % songurl.length;

超出你问的问题的范围,也有一些问题,你的MediaPlayer使用。在catch语句中拥有如此多的关键逻辑没有任何意义。这意味着你期望发生异常。你应该重新考虑你在那里做什么。

2

您可以简单地添加一个模数(%)经营者在你的代码

counter = counter++ % songurl.length

没有必要的if else块

btn_next.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     counter = counter++ % songurl.length 
     textview.setText(songurl[counter]); 
     try { 
      mediaPlayer.reset(); 
     } catch (Exception ex) { 
      try { 
       mediaPlayer.setDataSource(songurl[counter]); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mediaPlayer.prepare(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      mediaPlayer.start(); 
     } 

    } 
}); 
0

你看你叫mediaPlayer.setDataSource添加一个额外的( songurl [counter])在catch块中。 如果它不会有例外,当你调用mediaPlayer.reset()

试试这个:

try{ 
    mediaPlayer.reset(); 
    mediaPlayer.setDataSource(); 
    mediaPlayer.prepareAsync();--or mediaPlayer.prepare(); 
    (It depends on whether you load the url on the internet) 
    mediaPlayer.start(); -- if you call mediaPlayer.prepareAsync() you should call mediaPlayer.start() at the OnPreparedListener; 

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mediaPlayer) { 
       mediaPlayer.start(); 
      } 
     }); 
} 

如果你仍然不知道,我建议你阅读一些关于无限灵的状态。

PS如果MediaPlayer正在玩耍,你想让它发挥一个又一个,叫mediaPlayer.stop()第一;

+0

另一个是,如果(反== 4)计数器= 0; –