0

我正在扫描用户手机并获取所有设备音乐 uri 的列表。

然后我使用这些 Uris 来查找音乐元数据以在 RecyclerView 中进行设置。我发现有些歌曲在歌曲中没有艺术家、专辑或图像元数据,因此当我将值返回给 RecyclerView 时,我尝试通过将名称、艺术家等设置为默认标题来解决此问题。

我试过了isEmpty()== ""并且== null

对于== nullAndroid 给出的错误是它永远不会为空。

这是我的代码:

public class DeviceMusicCollection {

    public static ArrayList<DeviceMusicMetadata> getDeviceMusic(Context context)

    {
        // Get the list of songs on the device
        ArrayList <DeviceMusic> deviceMusicArray = MainActivity.deviceMusicStaticArrayList;

        // variables for metadata
        String metadataTitle;
        String metadataArtist;
        String metadataAlbum;
        byte [] metadataImage;

        //Create a new array to retrieve the metadata info for the songs
        ArrayList<DeviceMusicMetadata> deviceMusicMetadata = new ArrayList<>();

        // Create a metatdata retriever to collect metadata
        MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();

        if (deviceMusicArray != null){

                for (int i = 0; i < deviceMusicArray.size(); i++ ){

                // Create a Uri for each song from the music file address
                Uri uri = Uri.fromFile(new File(deviceMusicArray.get(i).getMusicFileAddress()));

                // Set the datadource for the metadata retriever
                mediaMetadataRetriever.setDataSource(context, uri);

                // Extract the title or default
                metadataTitle = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);

                    if (metadataTitle.isEmpty() || metadataTitle == null){
                        metadataTitle = deviceMusicArray.get(i).getMusicFileTitle();
                    }

                // Extract the artist or default
                metadataArtist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);

                    if (metadataArtist.isEmpty()){
                        metadataArtist = "Artist Unknown";
                    }

                // Extract the album or default
                metadataAlbum = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

                    if (metadataAlbum.isEmpty()){
                        metadataAlbum = "Album Unknown";
                    }

                // Extract the image (default handled in adapter)
                metadataImage = mediaMetadataRetriever.getEmbeddedPicture();

                deviceMusicMetadata.add(new DeviceMusicMetadata(metadataTitle, metadataArtist, metadataAlbum, metadataImage));
            }
        }
        return deviceMusicMetadata;
    }
}

据我所见,设置时我会遇到同样的问题:

String metadataTitle;
String metadataArtist;
String metadataAlbum;

我还尝试在 for 循环中初始化它们。我确信这很愚蠢,但不确定是什么。

在此先感谢您的帮助

4

2 回答 2

2

在检查其他任何内容之前,您需要检查它是否不为空。

使用 if 语句,参数会按照您编写它们的顺序一个接一个地检查所以你的 if 应该像

                    if (metadataTitle == null || metadataTitle.isEmpty())
于 2016-10-10T08:54:04.657 回答
2

null我认为问题在于您在尝试分配时如何防范metadataTitle

    // …

    if (metadataTitle.isEmpty() || metadataTitle == null) { // <-- HERE
        metadataTitle = deviceMusicArray.get(i).getMusicFileTitle();
    }

    // …

通过这样做,程序将metadataTitle.isEmpty()在确保它不是之前调用它null,而它应该是相反的方式。

尝试这样做:

    // …

    if (metadataTitle == null || metadataTitle.isEmpty()) { // <-- HERE
        metadataTitle = deviceMusicArray.get(i).getMusicFileTitle();
    }

    // …
于 2016-10-10T08:54:52.513 回答