我在Android中创建了一个音乐播放器。要创建Song对象,我必须使用ContentResolver中的不同URI重复查询各种数据。这是一个例子:
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
现在,如果我将专辑,流派和其他信息添加到Song对象中,您可以想象这看起来不会很漂亮。这是我考虑的一个选项,但我想知道是否有更好的方法:
使用Uri.parse(..)在保持数组中所有属性的字符串表示后将字符串转换为Uris,例如[Title,Artist,Album,..]。问题:并非所有数据类型都是字符串,因此将返回的值放在一个Collection中会很麻烦。此外,当它传递给Song构造函数时,我可能必须通过索引传递每个元素(从而使我的代码依赖于String数组的索引)。
我知道我可能会过度思考它,但我想知道是否有更好的方法来做到这一点。