如何通过java从mediastore获取distinct元素

时间:2016-10-15 17:39:20

标签: java android arraylist distinct-values

我正在尝试获取所有音频文件的文件名,但我获得了多首歌曲的相同文件名

1.我无法使用DISTINCT关键字,因为我从DATA获取文件名。

2.我正在使用Mediastore.Files所以选择它需要MEDIA_TYPE所以这种方式也是不可能的。

3.我希望Parent值不同于重复值。

所以唯一的方法就是在java中执行。我遵循给定here的方法,但我无法设置

这是我的一段代码

if (audioCursor.moveToFirst()) {
    do {
        int filetitle = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE);
        int file_id = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID);
        int fileparent = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.PARENT);
        int filedata = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
        Mediafileinfo info = new Mediafileinfo();

        info.setData(new File(new File(audioCursor.getString(filedata)).getParent()).getName());
        info.setTitle(audioCursor.getString(filetitle));
        info.set_id(audioCursor.getString(file_id));
        info.setParent(audioCursor.getString(fileparent));

        audioList.add(info);
    } while (audioCursor.moveToNext());
}

如何获得非重复元素?有关详细信息,请mediastore.file 我在Mediafileinfo类中添加了包含getter和setter的数据。

1 个答案:

答案 0 :(得分:1)

  

我希望将Parent值设为不同而不是重复值。

好吧,您可以使用HashSet<String>维护已显示的MediaStore.Files.FileColumns.PARENT值列表。

不确定SQL方法有什么问题。

HashSet<String> seenParents = new HashSet<String>();

if (audioCursor.moveToFirst()) {
    final int fileparent = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.PARENT);
    do {
        String parent = audioCursor.getString(fileparent);

        Mediafileinfo info = new Mediafileinfo();
        // bla...
        info.setParent(parent);

        if (!seenParents.contains(parent)) { // prevents dups
            seenParents.add(parent);
            audioList.add(info);
        }

// end loop