我正在尝试将所有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);
}
}
答案 0 :(得分:0)
感谢所有试图提供帮助的人,我找到了解决方案,问题是由于使用Android 6.0(Marshmallow)模拟器,问题在这里解决了: http://developer.android.com/training/permissions/requesting.html