0

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

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;
                }

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

4

3 回答 3

0

我完全同意 Jrom 和 10s 的观点。为什么要使用 HashMap。使用数组列表。

于 2012-07-14T22:28:04.403 回答
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>>.

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

于 2012-07-14T22:43:36.410 回答
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]);
}
于 2012-07-14T23:04:27.787 回答