【发布时间】:2012-01-12 01:08:54
【问题描述】:
我是 Java 新手,具有 C/C++ 背景。我正在尝试为 Android 编写音乐播放器应用程序,并且正在开发库扫描功能。我想要一个格式为艺术家->专辑->歌曲的分层数据库,其中艺术家有一个名字和一组专辑,一个专辑有一个名字、年份和一组歌曲,而歌曲有一个标题、曲目编号和文件位置。
我创建了三个类来存储这些信息:
public class libraryElementArtist
{
public String name;
public ArrayList<libraryElementAlbum> albums;
}
public class libraryElementAlbum
{
public String name;
public String year;
public ArrayList<libraryElementSong> songs;
}
public class libraryElementSong
{
public String name;
public int num;
public String filename;
}
填充它们的想法很简单 - 扫描每个文件并首先添加其艺术家,然后是专辑,然后是歌曲。每次在创建新专辑之前,它都会检查以确保艺术家/专辑不存在。
基本上,我开始创建一个 ArrayList 来存储艺术家信息,如下所示:
ArrayList<libraryElementArtist> libraryData = new ArrayList<libraryElementArtist>();
然后,将艺术家添加到数据库:
libraryElementArtist newEntry = new libraryElementArtist();
newEntry.name = song_artist;
libraryData.add(newEntry);
然后添加相册:
libraryElementAlbum newEntry = new libraryElementAlbum();
newEntry.name = song_album;
libraryData.get(artistIndex).albums.add(newEntry);
artistIndex 是专辑艺术家在顶级艺术家数组中的索引。
当我在设备上运行它并在调试器中单步执行时,libraryElementArtist 项目被插入到 libraryData 数组中,并且它们的名称被正确填写。但是,专辑字段被列为 null 并尝试添加专辑确实不填写任何数据。
对不起,如果这是一个菜鸟问题,就像我说我是 Java 新手,我已经搜索过但找不到我要找的东西。另外,这是我在 C++ 中执行此类任务的方式,不确定它是否是正确的 Java 方式。
【问题讨论】:
-
相反,您应该创建用户定义对象的 ArrayList。类似
ArrayList<Songs> -
我在添加艺术家部分添加了一行:
newEntry.albums = new ArrayList<libraryElementAlbum>();这使得 Object[0] 元素的数组显示在专辑下,但该元素仍然没有填充。 -
修复了它,这是一个关于 ArtistIndex 变量的愚蠢错误。正在创建艺术家,然后当专辑代码尝试运行时,它试图写入不存在的艺术家并失败。对于将来看到此线程的任何人,当所有索引都正确时,上面的代码可以正常工作。
-
将来,无论您在哪里使用一些整数“魔术索引”,都可以考虑使用 Map 代替,以 Artist 作为键。
标签: java android class arraylist