我想尝试开发简单的Android音乐播放器。 我有以下方法列出专辑标题,但它提供了重复的专辑列表。
public void getAlbumList() {
//query external audio
Activity a=getActivity();
ContentResolver musicResolver = a.getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
//String[] projection = null;
//String sortOrder = null;
String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("mp3");
String[] selectionArgsMp3 = new String[]{ mimeType };
Cursor musicCursor = musicResolver.query(musicUri, null, selectionMimeType, selectionArgsMp3, null);
//iterate over results if valid
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
int atitleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ALBUM);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ALBUM_ID);
//int bitmap = musicCursor.getColumnIndex
// (android.provider.MediaStore.Audio.Albums.ALBUM_ART);
//add songs to list
while (musicCursor.moveToNext()){
long thisId = musicCursor.getLong(idColumn);
String thisaTitle = musicCursor.getString(atitleColumn);
albumList.add(new Album(thisId, thisaTitle));
}
}
}
我尝试了How to use MediaStore query to get Artists without duplicates?,但它不起作用。
提前致谢。
答案 0 :(得分:0)
将此添加到您的相册类
@Override
public boolean equals(Object obj) {
if (obj instanceof Album) {
Album album = (Album) obj;
//here we compare if the 2 album objects are same or not (edit code as needed)
return (album.getaTitle().equals(this.aTitle) && album.getId == this.Id);
} else {
return false;
}
}
@Override
public int hashCode() {
int hashcode = 0;
hashcode = this.Id*20;
hashcode += this.aTitle.hashCode();
//here we generate the album object hashcode using Id and artistname
return hashcode;
}
然后,不要将对象添加到列表中,而是使用:
HashSet<Album> albumList = new HashSet<Album>();
albumList.add(new Album(thisId, thisaTitle));
//use simple for each loop to iterate
for(Album album:albumList){
System.out.println(album);
}
散列集按照主题处理重复