Hashmap, чтобы связать альбом с названием альбома? - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь отобразить названия альбомов и обложки альбомов из песен на моем устройстве. Я пытался использовать компаратор для сортировки названий альбомов, но когда я сортирую названия альбомов, обложка не соответствует названию альбома.

Как я могу связать альбом с соответствующими изображениями?

Я использую Пикассо для отображения обложки альбома и.

Я получаю обложку альбома от MediaStore.Audio.Media.ALBUM_ID;

Затем я попытался использовать хэш-карту, чтобы связать альбом с названием альбома.

Но я получаю эту ошибку;

E / Не удалось выполнить задачу: java.lang.NullPointerException: попытка вызвать метод интерфейса 'boolean android.database.Cursor.moveToFirst ()' для ссылки на пустой объект

// Creating the map  "Album IDs" -> "Album Names"
    albumIdToAlbumNameMap = new HashMap<>();

    //This is what we'll ask of the albums
    String[] albumColumns = {
            SONG_ALBUMID,
            SONG_ALBUM,
    };

    // Querying the album database
    cursor = resolver.query(musicUri, albumColumns, null, null, null);

    // Iterating through the results and filling the map.
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())
        albumIdToAlbumNameMap.put(cursor.getString(0), cursor.getString(1));

    cursor.close();

    // Map Song IDs to Album IDs
    songIdToAlbumIdMap = new HashMap<>();

    // For each album, we'll query the databases
    for (String albumID : albumIdToAlbumNameMap.keySet()) {

        Uri uri = MediaStore.Audio.Albums.getContentUri(albumID);

        cursor = resolver.query(uri, new String[] { SONG_ID }, null, null, null);

        // Iterating through the results, populating the map
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

            long currentSongID = cursor.getLong(cursor.getColumnIndex(SONG_ID));

            songIdToAlbumIdMap.put(Long.toString(currentSongID), albumID);
        }
        cursor.close();
    }


final String musicsOnly = MediaStore.Audio.Media.IS_MUSIC + "=1";

    // Actually querying the system
    cursor = resolver.query(musicUri, columns, musicsOnly, null, null);

    if (cursor != null && cursor.moveToFirst())
    {
        // NOTE: I tried to use MediaMetadataRetriever, but it was too slow.
        //       Even with 10 songs, it took like 13 seconds,

        do {
            // Creating a song from the values on the row
            QuerySongs song = new QuerySongs(cursor.getInt(cursor.getColumnIndex(SONG_ID)),
                    cursor.getString(cursor.getColumnIndex(SONG_FILEPATH)));

            song.setTitle      (cursor.getString(cursor.getColumnIndex(SONG_TITLE)));
            song.setArtist     (cursor.getString(cursor.getColumnIndex(SONG_ARTIST)));
            song.setAlbumID    (cursor.getInt(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));

            // Using the previously created genre maps
            // to fill the current song genre.
            String currentGenreID   = songIdToGenreIdMap.get(Long.toString(song.getId()));
            String currentGenreName = genreIdToGenreNameMap.get(currentGenreID);
            String currentAlbumID = songIdToAlbumIdMap.get(Long.toString(song.getId()));
            String currentAlbumName = albumIdToAlbumNameMap.get(currentAlbumID);
            song.setGenre(currentGenreName);
            song.setAlbum(currentAlbumName);

            // Adding the song to the global list
            songs.add(song);
        }
        while (cursor.moveToNext());
    }
    else
    {
        // What do I do if I can't find any songs?

    }
    cursor.close();

Здесь возникает ошибка

  // Iterating through the results, populating the map
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

            long currentSongID = cursor.getLong(cursor.getColumnIndex(SONG_ID));

            songIdToAlbumIdMap.put(Long.toString(currentSongID), albumID);
        }

1 Ответ

0 голосов
/ 30 июня 2018

Похоже, вам нужно исправить ввод запроса, чтобы избежать нуля в курсоре.

...