Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用其他阵列列表中歌曲的艺术家名称填充阵列列表_Java_Android_Arraylist - Fatal编程技术网

Java 如何使用其他阵列列表中歌曲的艺术家名称填充阵列列表

Java 如何使用其他阵列列表中歌曲的艺术家名称填充阵列列表,java,android,arraylist,Java,Android,Arraylist,因此,我正在为一个音乐播放器制作一个示例播放列表,并试图获得艺术家姓名和曲目标题。我已经成功地在listFragment中显示了这两个。但是,艺术家姓名和标题曲目都位于不同的ArrayList中,并且分别检索。因此,当我尝试对一个列表进行排序时,所有的事情都会搞砸 检索标题的代码 public void findAllMusicFilesTitles() { Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Strin

因此,我正在为一个音乐播放器制作一个示例播放列表,并试图获得艺术家姓名和曲目标题。我已经成功地在listFragment中显示了这两个。但是,艺术家姓名和标题曲目都位于不同的ArrayList中,并且分别检索。因此,当我尝试对一个列表进行排序时,所有的事情都会搞砸

检索标题的代码

public void findAllMusicFilesTitles() {

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String[] projection = { MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.TITLE };
    Cursor audioCursor = getActivity().getBaseContext().getContentResolver().query(uri, projection, null, null, null);

    if (audioCursor != null) {
        while (audioCursor.moveToNext()) {
            songarray.add(audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE)));
            }
        audioCursor.close();
    }
}
检索艺术家姓名的代码

 public void findAllMusicFilesArtists() {

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String[] projection = { MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.ARTIST };
    Cursor audioCursor = getActivity().getBaseContext().getContentResolver().query(uri, projection, null, null, null);

    if (audioCursor != null) {
        while (audioCursor.moveToNext()) {
            artistarray.add(audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST)));
        }
        audioCursor.close();
    }
}
ListFragment的onCreate()方法,我在其中进行排序

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    songarray = new ArrayList<String>();
    artistarray = new ArrayList<String>();

    findAllMusicFilesTitles();
    findAllMusicFilesArtists();

    Collections.sort(songarray, String.CASE_INSENSITIVE_ORDER);

    playlistArrayAdapter adapter = new playlistArrayAdapter(getActivity().getBaseContext(), songarray, artistarray);
    setListAdapter(adapter);

    }
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
songarray=newArrayList();
artistarray=新的ArrayList();
findAllMusicFilesTitles();
findAllMusicFilesArtists();
Collections.sort(songarray,String.CASE不区分大小写的顺序);
PlayArrayAdapter=新的PlayArrayAdapter(getActivity().getBaseContext(),songarray,artistarray);
setListAdapter(适配器);
}
你能提出解决这个问题的办法吗。我有一个想法,用歌曲URL创建另一个ArrayList,然后尝试找到一种解决方法,但这似乎也没用


谢谢

您可以使用光标根据已排序的值列表重新检索数据库中的信息


或者,您可以在彼此之间维护一个值的Hashmap以供快速参考,这样,当您想要从另一个值获取某些内容时,它们的顺序就无关紧要了。排序后,根据您的排序从数据库中重新检索数据可能是明智的。

您应该围绕歌曲名称和艺术家名称创建一个自定义包装。然后将此类用作适配器的支持模型,然后使用自定义比较器根据您想要排序的字段对模型进行排序

class PlayerModel {
    private String songName;
    private String artistName;

    // override equals and hashCode.
}

你试过hashmap吗?@JosefE。不,我没有。我是android开发新手。不过,我会调查此事