【问题标题】:Android refuses to read filesAndroid拒绝读取文件
【发布时间】:2016-05-16 06:40:55
【问题描述】:

我正在尝试将所有 mp3 文件加载到一个数组中,但 android 一直显示此错误:java.lang.NullPointerException: Attempt to get length of null array,错误在这一行:if(path.isDirectory() && path.listFiles().length > 0)

我将这两个权限行添加到我的清单文件中,但没有效果:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我的函数最初是由locateSongs(Environment.getExternalStorageDirectory());调用的

这是我迭代整个设备的功能:

 private void locateSongs(File path) {
        if(path.isDirectory() && path.listFiles().length > 0){
            File files[] = path.listFiles();
            for(File f : files){
                locateSongs(f.getAbsoluteFile());
            }
        }else if(path.isFile() && path.getName().contains(".mp3")){ // // TODO: 2/5/2016 add more types other than mp3
            MediaMetadataRetriever metaRetriver = new MediaMetadataRetriever();
            metaRetriver.setDataSource(path.getAbsolutePath());

            Song newSong = new Song();
            newSong.setAlbum(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
            newSong.setArtist(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
            newSong.setAuthor(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_AUTHOR));
            newSong.setName(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
            newSong.setBitRate(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
            newSong.setGenre(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
            newSong.setDataSourse(path.getAbsolutePath());
            newSong.setDuration(metaRetriver.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));

            byte[] art = metaRetriver.getEmbeddedPicture();
            Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length);
            newSong.setImage(songImage);
        }
    }

【问题讨论】:

  • 还有metaRetriver.getEmbeddedPicture() allowed 返回null。当它发生时,你会得到类似的错误。
  • 我在manifest文件中添加了权限请求,也尝试添加try和catch,但错误在第一个if条件
  • 所以path 为空或path.listFiles() 返回空。使用前检查两者是否为 null,如果为 null,则不要使用,但向用户显示敬酒。

标签: android android-permissions


【解决方案1】:

感谢所有试图提供帮助的人,我已经找到了解决方案,问题是由于使用了 Android 6.0 (Marshmallow) 模拟器,问题在这里解决了: http://developer.android.com/training/permissions/requesting.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多