Java 将音频文件数组传递给ArrayList

Java 将音频文件数组传递给ArrayList,java,android,android-activity,Java,Android,Android Activity,如何存储存储在以下位置的“原始”文件夹中的音频文件: int[] lessonClips = { R.raw.button_a, R.raw.button_2, R.raw.button_3, R.raw.button_4, R.raw.button_5, R.raw.button_6 }; 使用HashMap参数插入ArrayList,如下所示 ArrayList0){ 对于(文件:home.listFiles(新的FileExtensionFilter())

如何存储存储在以下位置的“原始”文件夹中的音频文件:

int[] lessonClips = { R.raw.button_a, R.raw.button_2, R.raw.button_3,
                R.raw.button_4, R.raw.button_5, R.raw.button_6 };
使用HashMap参数插入ArrayList,如下所示 ArrayList

我使用的类具有以下方法

/** 从SD卡读取所有mp3文件的功能 并将详细信息存储在ArrayList中 **/

public ArrayList getPlayList(){
File home=新文件(新字符串(“/sdcard/audio”);
if(home.listFiles(新文件扩展筛选器()).length>0){
对于(文件:home.listFiles(新的FileExtensionFilter())){
HashMap宋=新HashMap();
song.put(“songTitle”,file.getName().substring(0,(file.getName().length()-4));
put(“songPath”,file.getPath());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
}
//返回歌曲列表数组
返回歌曲列表;
}

因此,我试图将这些音频文件转换为字符串,以便在该方法中使用它们

我完全同意Jrom和10s。为什么要使用HashMap呢。
使用ArrayList。

现在我明白你想做什么了。我会为你提供另一种解决方案。尽管像这样使用了
HashMap
,但请尝试实现它,使您的代码对将来的更改更加具体

使用以下属性实现歌曲对象:

public class Song {
   String title;
   String path;
   int resource; //R.raw.*
   //setters and getters
}
然后就有了这个对象:
ArrayList

通过这种方式,您可以在一个对象中获得所有歌曲的详细信息,您可以按照自己的方式制作不同的播放列表,并且在HashMap中,您可以为每首歌曲设置一个ID,以便轻松访问它们

如果你不在乎给每首歌一个ID,你可以这样做:
ArrayList


将来,你可能需要在歌曲中添加艺术家或其他内容。这对此类更改更具鲁棒性,也是保持代码整洁的最佳方法。

以下是我的想法。从您的代码中,看起来您只是从特定目录中提取mp3文件。这意味着你只有一个播放列表。如果是这种情况,我只会存储歌曲的名称,如下所示:

ArrayList<String> songList;
ArrayList歌曲列表;
或者说:

ArrayList<Song> songList; //10s' suggestion.
ArrayList歌曲列表//10秒的建议。
至于你最初的问题,你可以试试这样:

for(int x = 0; x < lessonClips.length; x++)
{
    songList.add(getApplicationContext().getResources().
               getResourceEntryName(lessonClips[x]);
}
for(int x=0;x
你想做什么?你不能只拥有一个片段数组列表或一个HashMap,而不是两者都有吗?HashMap的键和值是什么?HashMap已经是一个存储键值对的数组。R.raw.button的值是多少。我知道它们在数组中表示为整数,但在XML中是什么?如果我理解你的问题,它们是“.mp3”文件,您的意思是:ArrayList LessonClips=new ArrayList();
for(int x = 0; x < lessonClips.length; x++)
{
    songList.add(getApplicationContext().getResources().
               getResourceEntryName(lessonClips[x]);
}