将一组音频文件传递给ArrayList

时间:2012-07-14 21:47:10

标签: java android android-activity

如何从存储在

中的“raw”文件夹中存储这些音频文件
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< HashMap< ?>>

我正在使用的课程有以下方法

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

public ArrayList<HashMap<String, String>> getPlayList(){
                    File home = new File(new String("/sdcard/audio"));

                    if (home.listFiles(new FileExtensionFilter()).length > 0) {
                        for (File file : home.listFiles(new FileExtensionFilter())) {
                            HashMap<String, String> song = new HashMap<String, String>();
                            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
                            song.put("songPath", file.getPath());

                            // Adding each song to SongList
                            songsList.add(song);
                        }
                    }
                    // return songs list array
                    return songsList;
                }

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

使用属性实现歌曲对象:

public class Song {
   String title;
   String path;
   int resource; //R.raw.*
   //setters and getters
}

然后你有了这个对象:ArrayList<HashMap<int, Song>>;

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

如果您不关心为每首歌曲提供ID,您可以这样做:ArrayList<ArrayList<Song>>

将来您可能需要在歌曲中添加艺术家或其他内容。这对于此类更改以及保持代码清洁的最佳方式更加健壮。

答案 2 :(得分:0)

这就是我的想法。从您的代码中,您似乎只是从特定目录中提取mp3文件。这意味着您只有一个播放列表。如果是这种情况,我会像这样存储歌曲的名称:

ArrayList<String> songList;

或者喜欢:

ArrayList<Song> songList; //10s' suggestion.

关于你原来的问题,你可以尝试这样的事情:

for(int x = 0; x < lessonClips.length; x++)
{
    songList.add(getApplicationContext().getResources().
               getResourceEntryName(lessonClips[x]);
}