2017-05-04 143 views
0

我建立的音乐播放器应用程序从SD卡从服务器上下载,我收集数据和保存文件命名为ArrayList中获得指数<HashMap的<字符串,字符串>>

private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

现在问题是我想根据用户点击回收站项目来播放mp3文件,因此,我需要为特定名称指定索引号。

如何获取索引用于传递mp3文件的名称?

/** 
    * Function to read all mp3 files from sdcard 
    * and store the details in ArrayList 
    */ 
    public ArrayList<HashMap<String, String>> getPlayList() { 
     File home = new File(MEDIA_PATH); 

     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()); 

       Log.d(TAG, "getPlayList() called title = "+file.getName().substring(0, (file.getName().length() - 4))+" Path = "+file.getPath()); 
       // Adding each song to SongList 
       songsList.add(song); 
      } 
     } 
     // return songs list array 
     return songsList; 
    } 
+3

我建议你做一个'Song'类而不是在HashMap中存储属性 –

+0

是的,POJO是一个很好的选择,但是我已经实现了HashMap,所以现在需要一段时间来实现和更改所有的类。 –

回答

2

有了您的建筑,你可以遍历列表,找到地图,你需要

int indexForSongName(String songName) { 
    ArrayList<HashMap<String, String>> playlist = getPlayList(); 

    for (int i = 0; i < playlist.size(); i++) { 
     HashMap<String, String> map = playlist.get(i); 
     if (map.containsValue(songName)) { // Or map.getOrDefault("songTitle", "").equals(songName); 
      return i; 
     } 
    } 

    return -1; // Not found. 
} 

不过,我建议你做的,而不是在一个HashMap存储性能的宋级。这是很好的做法,它会使这些任务更容易。

+0

我会尝试你的答案,并让你知道 –

+0

谢谢你,天才它的工作像魅力,我会记住你的建议在未来 –

相关问题