英文:
How to repeat songs on android (music app)
问题
我可以播放下一首歌曲或上一首歌曲,但我只是无法弄清楚如何重复播放同一首歌曲,我已经卡在这个问题上一天了。任何帮助都将不胜感激
播放下一首歌曲:
public void playNext(View view) {
Song nextSong = songCollection.getNextSong(songId);
if (nextSong != null) {
songId = nextSong.getId();
title = nextSong.getTitle();
artiste = nextSong.getArtiste();
fileLink = nextSong.getFileLink();
coverArt = nextSong.getCoverArt();
url = BASE_URL + fileLink;
displaySong(title, artiste, coverArt);
stopActivities();
playOrPauseMusic(view);
}
}
播放上一首歌曲:
public void playPrev(View view) {
Song prevSong = songCollection.getPrevSong(songId);
if (prevSong != null) {
songId = prevSong.getId();
title = prevSong.getTitle();
artiste = prevSong.getArtiste();
fileLink = prevSong.getFileLink();
coverArt = prevSong.getCoverArt();
url = BASE_URL + fileLink;
displaySong(title, artiste, coverArt);
stopActivities();
playOrPauseMusic(view);
}
}
SongCollection:
public class SongCollection {
// 实例变量:用于存储2个歌曲对象的数组
private Song songArray[] = new Song[2];
// SongCollection类的构造函数
public SongCollection() {
prepareSongs();
}
// 创建歌曲对象并将它们存储到songArray中
public void prepareSongs() {
// 创建第一个歌曲对象
Song theWayYouLookTonight = new Song("S1001", "The Way You Look Tonight", "Michael Buble",
"a5b8972e764025020625bbf9c1c2bbb06e394a60?cid=2afe87a64b0042dabf51f37318616965", 4.66,
"michael_buble_collection");
// 创建第二个歌曲对象
Song billieJean = new Song("S1002", "Billie Jean", "Michael Jackson",
"f504e6b8e037771318656394f532dede4f9bcaea?cid=2afe8", 4.9, "billie_jean");
// 将歌曲对象插入到SongArray中
songArray[0] = theWayYouLookTonight;
songArray[1] = billieJean;
}
// 搜索并返回具有指定id的歌曲
public Song searchById(String id) {
Song song = null;
for (int index = 0; index < songArray.length; index++) {
song = songArray[index];
if (song.getId().equals(id)) {
return song;
}
}
// 如果在SongArray中找不到歌曲,
// 将返回null歌曲对象
return null;
}
public Song getNextSong(String currentSongId) {
Song song = null;
for (int index = 0; index < songArray.length; index++) {
String tempSongId = songArray[index].getId();
if (tempSongId.equals(currentSongId) && (index < songArray.length - 1)) {
song = songArray[index + 1];
break;
}
}
return song;
}
public Song getPrevSong(String currentSongId) {
Song song = null;
for (int index = 0; index < songArray.length; index++) {
String tempSongId = songArray[index].getId();
if (tempSongId.equals(currentSongId) && (index > 0)) {
song = songArray[index - 1];
break;
}
}
return song;
}
}
英文:
I can play the next song or previous song but I just can't figure out how to repeat the same song and I've been stuck on this for a day. Any help is greatly appreciated
Playing next song:
public void playNext (View view){
Song nextSong = songCollection.getNextSong(songId);
if (nextSong != null) {
songId = nextSong.getId();
title = nextSong.getTitle();
artiste = nextSong.getArtiste();
fileLink = nextSong.getFileLink();
coverArt = nextSong.getCoverArt();
url = BASE_URL + fileLink;
displaySong(title,artiste,coverArt);
stopActivities();
playOrPauseMusic(view);
Playing previous song
public void playPrev (View view ){
Song prevSong = songCollection.getPrevSong(songId);
if ( prevSong != null) {
songId = prevSong.getId();
title = prevSong.getTitle();
artiste = prevSong.getArtiste();
fileLink = prevSong.getFileLink();
coverArt = prevSong.getCoverArt();
url = BASE_URL + fileLink;
displaySong(title, artiste, coverArt);
stopActivities();
} playOrPauseMusic(view);
}
SongCollection:
public class SongCollection {
// Instance variable: An array to store 2 Song objects
private Song songArray [] = new Song[2];
//Constructor of SongCollection class
public SongCollection() { prepareSongs (); }
//Create Song objects and store them into songArray
public void prepareSongs () {
//Create the first Song object
Song theWayYouLookTonight = new Song("S1001","The Way You Look Tonight","Michael Buble",
"a5b8972e764025020625bbf9c1c2bbb06e394a60?cid=2afe87a64b0042dabf51f37318616965",4.66,
"michael_buble_collection");
//Create the second Song object
Song billieJean = new Song("S1002", "Billie Jean","Michael Jackson",
"f504e6b8e037771318656394f532dede4f9bcaea?cid=2afe8", 4.9, "billie_jean");
//Insert the song objects into the SongArray
songArray[0] = theWayYouLookTonight;
songArray[1] = billieJean;
}
//Search and return the song with the specified id.
public Song searchById (String id) {
Song song = null;
for (int index = 0; index < songArray.length; index++) {
song = songArray[index];
if (song.getId().equals(id)) {
return song;
}
}
//If the song cannot be found in the SongArray,
//The null song object will be returned
return null;
}
public Song getNextSong (String currentSongId) {
Song song = null;
for (int index = 0; index < songArray.length; index++){
String tempSongId = songArray[index].getId();
if (tempSongId.equals(currentSongId)&& (index < songArray.length -1)) {
song = songArray[index+1];
break;
}
}
return song;
}
public Song getPrevSong (String currentSongId){
Song song = null;
for (int index = 0; index < songArray.length; index++){
String tempSongId = songArray[index].getId();
if (tempSongId.equals(currentSongId)&& (index > 0)){
song = songArray[index -1];
break;
}
}
return song;
}
}
答案1
得分: 0
你可以使用这个方法来获取当前的歌曲,但我认为这不是一个好的选项。你的 SongCollection
类应该包含所有的内容,Activity/Fragment 不应该使用 currentSongId
来获取下一首或上一首歌曲。
英文:
You can use this to get the current song but still, I am thinking it is not good option. Your class SongCollection
should carry all the stuff and Activity/Fragment shouldn't use currentSongId
to get next or previous song.
public Song getCurrentSong (String currentSongId) {
Song song = null;
for (int index = 0; index < songArray.length; index++){
String tempSongId = songArray[index].getId();
if (tempSongId.equals(currentSongId)) {
return songArray[index];
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论