2017-09-01 57 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; –