2012-08-01 65 views
2

基本上我创建了一个Android音乐播放器。我已经设法将STRING存储到我的图书馆中每首歌曲的“评论”部分。Android中歌曲的数据结构

该字符串是形式例如。 “吉他,鼓,西班牙语,伤心”

现在我的顾虑是要拿出一个数据结构来解决这个MP3文件(路径)以该字符串一起移动,在我的代码。是什么让它更具挑战性是:

上面看到的字符串是由逗号“,”所以每当用户想创建一个播放列表,他们只会给我一个单词列表(标签)和我必须看看每首歌曲,看看是否有他们正在查找的TAG。我通过将存储在歌曲的COMMENT部分中的字符串拆分为子字符串(TAGS)并在用户输入时匹配它。

我在寻找一个好的数据结构的建议。

我应该事先分裂注释部分,并保持它在某种收集的?或者当我循环播放每首歌曲时这样做?将它分割以根据输入检查它?

我想用的ArrayList> 的,但也许有一个更好的办法...

回答

1

反向索引将更加合适的,如果歌曲列表很长。这不是循环播放每首歌曲,而是检查是否包含标签,您可以直接找到标签并提取与其关联的歌曲列表。直接跳转到标签可以通过使用Map来完成,并且在一个条目中该值可以是歌曲列表(S)。

Map<String, List<Song>> tagIndex 

我假设宋是一个抽象歌曲的类。

如果其无法坚持它可以在后台启动建立索引。

EDIT-1:(回复的第一个评论)

我认为所有的Android设备都使用的SQLite。如果这确实是一种容易集成的情况,那么您可以通过几种方式来存储和访问标签。

  1. 数据库和评论商店标签。
  2. 仅在数据库中存储标签。

在第一种方法的标签将生存的应用程序重新安装。但是,其他应用程序也可以使用其他应用程序的注释,这些应用程序可能以其他方式使用它或编辑/覆盖您的值在这种方法中,您必须在应用程序安装时构建索引,并在构建初始索引后随时保持评论和数据库同步。

第二种方法与第一种方式部分相似,其中标签存储在数据库中并在旅途中保持。但是,如果应用程序未安装,则没有初始构建并且标记可能会被擦除。这可能会也可能不会被接受,但这种方法比第一种方法更简单。

如果使用SQLite,则根本不需要在内存中维护标记。一切都可以在数据库中维护。

表:tag_index

列:(TAG_NAME,SONG_NAME,song_path)

+0

这使得更多的意义,我会接受这个答案,只要我可以围绕它的头。因为我仍然需要找出每个独特的TAG如何将所有歌曲映射到正确的位置?再次检查每首歌曲TAG,看看它是否存在? – Achilles 2012-08-01 05:27:38

+0

请参阅EDIT-1。没有足够的评论。 – sgp15 2012-08-01 10:38:38

+0

通过几种方式,你的意思是SQLite和Map ...只是快速浏览一下SQLite,我认为它的命令行并通过手机界面使用它会很困难,不是吗? – Achilles 2012-08-01 10:41:37

1

ArrayList中就是这样,在我看来不错,因为你将有不同的标签我猜想名单。

但是我建议不要使用字符串作为类型,也许你应该使用一个标签类的列表,当你需要进行更改时,它会给你更多的灵活性。

希望它有帮助。

+0

瑞安,我可以将字符串值只存储到每首歌曲的注释部分,但当然我每次检索它,我把它分成一个子字符串列表(标签) – Achilles 2012-08-01 03:11:23

+0

确切地说,如果你可以将它分成sub_string,那么有什么问题? – 2012-08-01 03:13:06

+0

你可以使用stringTokenizer打破标签(老派的方式) – 2012-08-01 03:14:56